2017-04-23 21 views
1

我想使用我创建的方法find()来搜索泛型类型T的arrayList元素。搜索时,用户必须将它们正在搜索的项目for和两个索引,他们希望在startPosition和endPosition之间进行搜索。每当我运行main()时,它总是打印-1,即使在我的测试代码中,Chevy显然是在0到3之间。谁能帮我弄清楚为什么它没有印刷雪佛兰所在的适当指数?谢谢!在Java中的两个arrayList索引之间搜索泛型项目

ALIST:

import java.util.Scanner; 
public class AList<T> implements ListInterface<T> 
{ 
    private T[] L; 
    private T k; 
    private int count; 

public AList(int s) 
{ 
    L =(T[]) new Object[s];//Allows the client to decide the length of the list ASK HOW TO MAKE IT A SET SIZE OF 20 
    count = 0; 
}//end of constructor 

public void add(T item)throws ListException 
{ 
    if(count == L.length) 
     throw new ListException("Cannot add. List is full."); 

    if(item == null || item == "") 
     throw new ListException("Error. Unable to add. Cannot add null entries."); 

    L[count] = item; 
    count++; 
}//end of add method 

public void add(T item, int position)throws ListException 
{ 
    if(count == 0) 
     throw new ListException("Error. Unable to insert. List is empty."); 
    if(count == L.length) 
     throw new ListException("Error. Unable to insert. List is full"); 
    if(item == null || item == "") 
     throw new ListException("Error. Unable to insert. Attempt to insert null object."); 
    if(position <= 0 || position > count) 
     throw new ListException("Error. Unable to insert. Bad position."); 

    for(int k = count-1; k >= position-1; k--) 
    { 
     L[k+1] = L[k]; 
     L[2] = L[1]; 
    } 
    L[position-1] = item; 
    count++; 
}//end of insert method 

public T get(int position)throws ListException 
{ 
    if(position <= 0 || position > count) 
     throw new ListException("Error. Unable to get. Bad position."); 
    if(count == 0) 
     throw new ListException("Error. Unable to get. List is empty."); 

    return L[position-1]; 
}// End of get method 

public T set(T item, int position)throws ListException 
{ 
    if(item == null || item == "") 
     throw new ListException("Error. Unable to replace. Replacement cannot be null."); 
    if(position <= 0 || position > count) 
     throw new ListException("Error. Unable to replace. Bad position."); 
    if(count == 0) 
     throw new ListException("Error. Unable to replace. List is empty."); 

    T temp = L[position-1]; 
    L[position-1] = item; 
    temp = item; 

    return temp; 

}// End of set method 

public int find(T item, int startPosition, int endPosition)throws ListException 
{ 
    if(startPosition < 0 || endPosition > count) 
     throw new ListException("Error. Unable to find. Start and/or end position bad."); 

    int found; 

    if(startPosition > endPosition) 
     found = -1; 
    else if(item.equals(L[startPosition])) 
     found = startPosition; 
    else 
     found = find(item, startPosition+1, endPosition); 

    return found; 

}//method for finding 

public int size() 
{ 
    return count; 
}// End of size method 

public String toString() 
{ 
    int k; 

    if(count == 0) 
     return "The list is empty. \n"; 

    String temp = ""; 
    for(k = 0; k < count; k++) 
    { 
     temp += L[k] += "\n"; 
    } 

    return temp; 
}//end of method toString 

public T remove(int position)throws ListException 
{ 
    if(count == 0) 
     throw new ListException("Error. Unable to remove. List is empty."); 
    if(position <= 1 || position >= count) 
     throw new ListException("Error. Unable to remove. Bad position."); 

    T temp = L[position-1]; 
    int k; 

    for(k = position-1; k <= count; k++) 
    { 
     L[k] = L[k+1]; 
    } 
    count--; 
    return temp; 
}//end of remove method 

public void clear() 
{ 
    for(int k = count; k > 0; k--) 
    { 
     count--; 
    } 
}// End of clear method 

public boolean isEmpty() 
{ 
    if(L.length == 0) 
     return true; 
    else 
     return false; 

}// End of isEmpty method 

} //程序结束

测试代码:

public static void main(String[] args) 
{ 
    try 
    { 
     AList<String> carList = new AList<String>(20); 

     carList.add("Ford"); 
     carList.add("Chevy"); 
     carList.add("Toyota"); 
     carList.add("Mercedes"); 

     System.out.println(carList); 

     System.out.println(carList.find("Chevy", 0, 3)); 
    } 
    catch(ListException e) 
    { 
     System.out.println(e); 
    } 
} 

ListInterface:

public interface ListInterface<T> 
{ 
    public void add(T item)throws ListException; 
    public void add(T item, int position)throws ListException; 
    public T get(int position)throws ListException; 
    public T set(T item, int position)throws ListException; 
    public int find(T item, int startPosition, int endPosition); 
    public int size(); 
    public T remove(int position) throws ListException; 
    public void clear(); 
    public boolean isEmpty(); 
} 
+3

请出示你的'AList'类的其余部分。您发布的代码(修复错字之后)似乎不是您问题的根源。 – Eran

+0

包括所有的AList和与之相伴的界面。如果你需要异常类,请告诉我。我很茫然,并且尝试了一切,所以我非常感谢他们的帮助。 – Fall0ut

回答

1

你必须明确地返回条件如果起始位置是小于的结束位置。我相信这是一个错字,和你的意思是有一个>标志存在,而不是一个<标志:

if (startPosition > endPosition) { 
// Changed here --^ 
    return -1; 
+0

我切换这个,我仍然得到-1作为输出。我的递归正确完成了吗?我一直在努力为这项任务争取好几个小时,并且我设法得到了除此之外的所有方法。 – Fall0ut