2016-12-29 1 views
1

このエラーが発生しました。それは非常に基本的かもしれませんが。 長さ3の配列を宣言しました。なぜそれでもOutofBoundExceptionエラーが表示されますか?配列内のJava OutofBoundException

public static void main(String[] args) { 
      int i; 
      String[] arr = new String[3]; 
      Scanner input = new Scanner(System.in); 
      System.out.println("Please enter the name"); 
      for (i = 0; i < 3; i++) { 
       arr[i] = input.nextLine(); 
      } 
      System.out.println(arr[i]); 
     } 
    Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3 
     at arraysPractice.Arr2.main(Arr2.java:21) 
+0

インデックスは0からです。したがって、配列の長さが3の場合、それらのインデックスは0,1,2 –

答えて

3

forループが終了した後、あなたのiがあなたの配列のサイズが唯一の3あるのでoutOfBoundされる3となりますので、それはです。

あなたは最後の要素を印刷したい場合はそう

System.out.println(arr[i-1]); 

を印刷します。エラーのこのタイプを避けるために

NOTE

、最後の要素を印刷するarr[arr.lenght - 1]を使用してみてください。

+0

です。問題を解決した場合は、投票ボタンのすぐ下にある小さなボタンを押して回答を受け入れることができます。 :) @ user2863083 – Kaushal28

0

ループは、3の値を持つiで終了します。 01、および2というインデックスしかないので、次に動作しないarr[i]を印刷しようとします。

私はSystem.out.printlnステートメントの中にのループの後にではなくループを持つことを意味すると思いますか?

0

最初の繰り返し)。 I = 0と0 < 3それではforループに入り、そのあとI ++だから私は1です。
2回目の繰り返し).I = 1と1 < 3それはループのために入り、その後はI ++のでI = 2になります。
3回目の繰り返し)I = 2と2 < 3それではループに入り、それ以降はI ++だから3 =
4回目の繰り返し)I = 3と3 < 3(false)ループを終了し、あなたは印刷しようとしています。 System.out.println(arr [i]);ここでI = 3。あなたの配列サイズ= 3(最大位置は2、残りの位置は(0,1,2))を意味するので、インデックス3の配列をチェックしたいが配列の最大インデックスは2であるため、インデックスは範囲外です。

したがって、QUICKはSystem.out.println(arr [i])をputします。 in forループ。