2015-11-13 6 views
3

Я просто работаю над простой простой программой для цикла и цикла while, и ArrayIndexOutOfBoundsException.Как решить ArrayIndexOutOfBoundsException в этом коде?

Вот мой код:

public class ForWhileLoops 
{ 
    public static void main(String[] args) 
    { 
    int[] mary = new int[30]; 

    for(int a = 0; a < 31; a++) 
    { 
     mary[a]= a*3; 
    } 
    for(int b = 0; b < 31; b++) 
    { 
     System.out.println(mary); 
    } 
    int c = 0; 
    while(c < 31) 
    { 
     c++; 
     System.out.println(c); 
    } 
    } 
} 

А вот ошибка, которая произошла:

java.lang.ArrayIndexOutOfBoundsException: 30 
    at ForWhileLoops.main(ForWhileLoops.java:9) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
    at java.lang.reflect.Method.invoke(Unknown Source) 
    at edu.rice.cs.drjava.model.compiler.JavacCompiler.runCommand(JavacCompiler.java:272) 
+0

Допустимы ответы ниже, но не путайте, если вы видите 30 строк текста мусора при печати массива mary. Например, см. Http://stackoverflow.com/questions/409784/whats-the-simplest-way-to-print-a-java-array –

ответ

5
int[] mary = new int[30]; 

Array индексируется начиная с 0.

так что int[30] массив будет иметь действительные индексы от 0 к 29

for(int a = 0; a < 31; a++)

в последней итерации вы обращаетесь mary[30] которая находится вне пределов вашего массива.

исправить это, заменив его

for(int a = 0; a <mary.length; a++)

С помощью этого решения, если вы измените размер вашего массива не нужно менять for цикл

+0

Большое вам спасибо! – maryt

7

Использование

for int(a = 0; a < mary.length; a++) { 
    ... 
} 

mary.length урожайность 30.

Ваш массив имеет длину 30 элементов. Однако первый элемент равен 0, что делает 29 последним элементом.

+0

Большое вам спасибо! – maryt

+0

Можете ли вы отметить это как правильный ответ, если это поможет? В моей стране они изгоняют мальчиков, которые имеют менее 500 репутации stackoverflow в возрасте 20 лет –

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