2017-02-20 2 views
-3

ジェネリックアレイリストを作成し、getメソッドで問題が発生しているim。インデックスパラメータを検証していますが、入力されたパラメータが範囲外の場合にはgetメソッドを使用しないようにしてください。だから、誰かがインデックス20だけで10個のインデックスしかない場合、エラーメッセージを表示して次のコードを実行すると、インデックス20に値を取得するよう求められます。 今すぐエラーメッセージが表示され、引き続き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); 

をそれはそれはlist.getでエラーを停止し、私を与えるだろう、最初のインデックスに27を追加し、配列を作成します(100 )。 私は、そのテストでエラーをスローし、それをスキップしてlist.get(0)を実行しようとしています。

+0

、とで示している:あなたはlist.get(100);がエラーをスローした場合に停止しないようにテストコードをしたいですあなたのコードはその行を引き起こします。 –

+0

インデックスが範囲外の場合は、例外をスローする必要があります。あなたのコードはこれをしません。スレッドで –

+0

例外「メイン」でjava.lang.Error:未解決のコンパイルの問題:もちろん GenericList.get(GenericList.java:52)で \t – PFKrang

答えて

2

エラーを出力する代わりに、throwステートメントを使用してエラーをスローします。あなたはおそらくArrayIndexOutOfBoundsExceptionかそれと似たものがほしいと思うでしょう。これを行うには、あなたがあなたのgetメソッドの先頭にあるチェックを持っている必要があります。

public X get(int index) throws ArrayIndexOutOfBoundsException{ 

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

    return arr[index]; 
} 

その後、問題が実装していますが、テストコードではありません。あなたのコード内のエラーについて質問をしているとき、完全なエラーメッセージを投稿するスマートで参考になる

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

try { 

    list.get(100); 

} 
catch (Exception e) { 

    System.out.println(e); 

} 

list.get(0); 
関連する問題