2013-05-11 5 views
0

Я пытаюсь сделать приложение, которое просит пользователя ввести количество элементов в массиве, а затем попросить их заполнить этот массив целыми числами. А после, распечатать.Почему мой массив не распечатывает мой ввод?

Когда я запускаю его он просит меня ввести, а потом дает мне:

Исключение в потоке "основного" java.lang.ArrayIndexOutOfBoundsException: 10 на main.main (main.java:13)

import java.util.Scanner; 

public class main { 
public static void main(String [] args){ 
    Scanner scan = new Scanner(System.in); 
    System.out.println("Input number of units in array: "); 
    int i1 = scan.nextInt(); 
    int[] arrayOne= new int[i1]; 

    for(int i=0 ; i<=i1 ; i++){ 

     System.out.println("Enter " + i + " unit in array."); 
     arrayOne[i] = scan.nextInt(); 

    } 


    System.out.println(arrayOne); 


} 

} 

Можете ли вы, ребята, помочь мне определить, где моя ошибка? Я попробовал несколько разных вещей, но ничего не работает.

Спасибо!

+0

'я <= i1' неправильно. Это будет длина вашего массива, а не последний действительный индекс. Вместо этого используйте 'i

+0

Проверка состояния вашего цикла должна быть «i

+0

возможный дубликат [Java ArrayIndexOutOfBounds Exception] (http://stackoverflow.com/questions/4044578/java-arrayindexoutofbounds-exception) – madth3

ответ

5

Массивы основаны на нуле. Здесь вы превыше верхней границы. Заменить:

for (int i = 0; i <= i1; i++) { 

с

for (int i = 0; i < i1; i++) { 

Также используйте Arrays#toString для отображения содержимого массива, в противном случае будет отображаться Object#toString представление массива:

System.out.println(Arrays.toString(arrayOne)); 
+0

Дает мне это как результат, но не больше ошибок, так что это хорошо. [I @ 43fee2db – LearnIT

+0

Вы показываете представление массива типа Object # toString. Вместо этого используйте 'Arrays.toString' – Reimeus

+0

Это сработало! Спасибо! – LearnIT

0

Ваш код кажется, что вам нужно каждый раз в вашем цикле производить новое сканирование.

Вы также делаете одну итерацию слишком много (по сравнению с размером вашего массива).

Вероятно, этот код будет работать лучше:

import java.util.Scanner; 

public class Main 
{ 
    public static void main(String [] args) 
    { 
     Scanner scan = new Scanner(System.in); 
     System.out.println("Input number of units in array: "); 
     int i1 = scan.nextInt(); 
     int[] arrayOne= new int[i1]; 
     for(int i=0 ; i<i1 ; i++) 
     { 
      System.out.println("Enter " + i + " unit in array."); 
      Scanner other_scan = new Scanner(System.in); 
      arrayOne[i] = other_scan.nextInt(); 
     } 
     for(int i=0 ; i<i1 ; i++) 
     { 
      System.out.println("arrayOne["+i+"]: "+arrayOne[i]); 
     }  
    } 
}