2016-09-15 2 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

Отлаживайте свой код, и вы увидите, что 'i' будет 5 после цикла, который выходит за пределы индекса [0,4]. Это потому, что цикл будет увеличивать '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]) 

в петлю цикла, и все должно быть в порядке.

Смежные вопросы