2016-10-23 23 views
-2

IDの整数を含む "student_id"という配列があるプログラムを作成しています。私は、以下に含まれている配列からIDを削除できるメソッドを作成しました。しかし、テストしようとすると、次のエラーが発生します。Javaエラー:スレッド "main" java.lang.IndexOutOfBoundsExceptionの例外:

Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 332, Size: 3 
     at java.util.ArrayList.rangeCheck(ArrayList.java:653) 
     at java.util.ArrayList.remove(ArrayList.java:492) 
     at Module.removeStudent(Module.java:40) 
     at TestModule.main(TestModule.java:19) 

どうしたのですか?ありがとうございました。

public boolean removeStudent(int id){ 
     //removes a student from the module 
     if (id >= 100 && id <= 99999999 && student_id.contains(id)){ 
      student_id.remove(id); 
      return true; 
     } else { 
      return false; 
     } 
    } 

    System.out.println("Testing removeStudent, the following inputs should return true"); 
    System.out.println("28262722: " + (test1.removeStudent(28262722))); 
+1

あなたは3つのアイテムしか保持していないArrayListから332'ndオブジェクトを削除しようとしています。これは、プログラムロジックを見直して修正する時間です。 –

+1

おそらく、異なるremoveオーバーロードを使用したいと思うかもしれません - それはObjectパラメーターを取るものです。これを行うには、StudentクラスがequalsとhashCodeを正しくオーバーライドする必要があります。 –

+1

あなたのエラーはこの問題について説明しています: 'IndexOutOfBoundsException'は通常、アクセスしようとしているインデックスが範囲外である場合に発生します。存在しないかもしれないインデックス '28262722'を削除しようとしていますが、あなたがしたいのは、私が思うそのインデックスの代わりにidを削除することです。 –

答えて

1

あなたのエラーメッセージによって示されているように、あなただけの3つのオブジェクトがあるにもかかわらずArrayListで第三百三十二オブジェクトを削除しようとしています。

ArrayList.remove()には、削除するオブジェクト(実行しようとしていたものと仮定します)またはintインデックスのいずれかのパラメータを指定できます。 intを渡そうとしていますが、それを取り除くにはintですが、代わりにintをインデックスとして扱い、そのインデックスにあるものを削除しようとしています。

だから、あなたはtest1.removeStudent(28262722)を呼び出すときには、そのIDで学生を削除していない - その代わり、あなたは(私はエラーがインデックスを思い付く理由はわからないArrayListで28262723nd位置に学生を削除します332の)この問題を解決するには

、あなたがString Sを装っあなたArrayList(多分int秒で別のオブジェクトを使用する必要があります - すなわち"28262722"の代わり28262722)、またはあなたがベースの学生を削除する必要がありますidの代わりにインデックス。

+0

ありがとう、これははるかに理にかなっています!私はそれを削除するために "削除"の代わりに "for"ループを使って修正しました。 – assassinsweed1

+0

@fabian教えてくれてありがとう、編集済み – Shannon

関連する問題