2017-04-23 63 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