2016-09-15 7 views
0

ユーザーが値を入力した後、プログラムはサイズ5の配列に格納された値を出力します。ここで ArrayIndexOutOfBoundsException配列から値を出力するとき

は私のコードです:

import java.util.Scanner; 

public class Arrays_Qu1 { 

    public static void main(String[] args) { 

    Scanner sc= new Scanner(System.in); 
    int arr[]= new int [5]; 

    System.out.println("Enter a number"); 

    int i; 
    for (i=0;i<arr.length;i++) { 
     arr[i]=sc.nextInt(); 
    } 

    System.out.println(arr[i]); 
    } 
} 

私は5番目の値を入力した後、プログラムが終了しませんが、代わりにスロー:スレッド「メイン」java.lang.ArrayIndexOutOfBoundsExceptionで

例外: 5

+4

ループの後の 'i'の値は何ですか? – Actorclavilis

+1

あなたのコードをデバッグすれば、インデックス境界[0,4]外にあるループの後に 'i'が5になることがわかります。条件をチェックする前に 'i'をインクリメントするので、' i'を5に増やし、 'i Thomas

+1

I ++はあなたが思っているよりもう一度実行します。ループの最後の反復では、配列[]の代入の直後です。 – ABuckau

答えて

2

ループ外で印刷していて、配列の範囲外のarr [5]を印刷しようとしているためです。各要素を印刷する場合は、印刷がループになっている必要があります。

int i; 
for (i = 0; i < arr.length; i++) { 
    arr[i] = sc.nextInt(); 
    System.out.println(arr[i]); // to print each element 
} 

// value of i is now 5, so arr[i] is invalid 
System.out.println(arr[i-1]); // to print last element 
System.out.println(Arrays.toString(arr)); // to print whole array 
0

あなたは次のように配列の最後の要素にアクセスする必要があります。

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

が、私は、配列の印刷だけで最後の要素は、あなたが望むものではないと考えています。だからあなたは行を移動する必要があります

System.out.println(arr[i]) 

forループとそれはokでなければなりません。

関連する問題