2017-02-20 66 views
-3

所以即時創建一個通用數組列表和即時通訊與get方法的問題。我有它驗證索引參數,但我也希望它不使用get方法,如果輸入的參數超出範圍。因此,如果有人要求它在索引爲20時獲得一個值,那麼只有10個索引時,它會顯示一條錯誤消息並運行下一個代碼。 現在它會顯示我的錯誤消息,仍然嘗試使用get方法。通用數組列表問題與get方法(Java)

public class GenericList<X> { 

    // Use an array to create the list 
    private X arr[]; 
    private int size; 

    //Constructor for objects of class GSL 

    public GenericList(){ 
     this.newArray(); 
    } 

    // Create a new array 

    private void newArray(){ 
     arr = (X[]) new Object[10]; 
     size = 0; 
    } 

    // Expand array 

    private void expandArray(){ 
     X[] arr2; 
     arr2 = (X[]) new Object[(int)(arr.length * 1.2)]; 
     //Copy elements from arr to arr2 
     for (int i = 0; i < arr.length; i++) 
      arr2[i] = arr[i]; 
     //Have arr point to new array 
     arr = arr2; 
    } 

    //Return the size of the list 

    public int size(){ 
     return size; 
    } 


    // Add a value to the list 

    public void add(X value){ 
     if (size == arr.length){ 
      this.expandArray(); 
     } 
     arr[size] = value; 
     size++; 
    } 

    // Get the value at the specified location in the list 

    public X get(int index){ 
     if (index < 0 || index >= size) 
      System.out.println("Index out of bounds"); 
     return arr[index]; 
    } 

基本上,如果我運行這個測試代碼:

GenericList<Integer> arr = new GenericList(); 
list.add(27); 
list.get(100); 

list.get(0); 

這將創建一個數組,添加27到第一個索引,那麼它會停下來給我的錯誤在list.get(100 )。 我試圖讓它在該測試中拋出一個錯誤,然後跳過它並運行list.get(0)。

+0

當你問一個問題,你的代碼中的錯誤,這將是明智的和有益的發佈完整的錯誤消息,並指示你的代碼是哪一行導致它的。 –

+0

如果索引超出範圍,則需要引發異常。你的代碼不會這樣做。 –

+0

異常在線程「主要」 java.lang.Error的:未解決的問題,編譯: \t此方法必須返回一個類型X的結果 \t在GenericList.get(GenericList.java:52) – PFKrang

回答

2

而不是使用throw語句打印出想要引發錯誤的錯誤。你可能想要一個ArrayIndexOutOfBoundsException或類似的東西。要做到這一點,你應該在你的get方法的開頭有一個檢查:

public X get(int index) throws ArrayIndexOutOfBoundsException{ 

    if (index < 0 || index >= size) 
     throw new ArrayIndexOutOfBoundsException(); 

    return arr[index]; 
} 

那麼問題不在於你實現,但在你的測試代碼。你想,如果list.get(100);拋出一個錯誤的測試代碼不會停止:

GenericList<Integer> arr = new GenericList(); 
list.add(27); 

try { 

    list.get(100); 

} 
catch (Exception e) { 

    System.out.println(e); 

} 

list.get(0);