Исключение в потоке «main» java.lang.ArrayIndexOutOfBoundsException: 2 при тестировании.GameOfLife.main(gameOfLife.java: 10)

#java #arrays

#java #массивы

Вопрос:

Вот мой код

 class GameOfLife {
public static void main(String[] args) {
    int height = 0;
    int width = 0;
    int [][][] universe = new int [2][20][20]; 
    for (height=0; height <= 5; height   ){
        for (width=0; width <= 5; width  ){
            universe [2][height][width]= 0;
        }
    }
    System.out.print(universe[2][2][3]);
}
}
 

Исключение в потоке «main» java.lang.ArrayIndexOutOfBoundsException: 2
при тестировании.GameOfLife.main(gameOfLife.java: 10)

Комментарии:

1. Используете ли вы Eclipse IDE для отладки вашего кода? Я настоятельно рекомендую это.

2. Массивы индексируются с НУЛЯ, а не с ЕДИНИЦЫ.

Ответ №1:

Когда вы определяете юниверс

 int [][][] universe = new int [2][20][20];
 

Он имеет два пятна, индекс 0 и индекс 1. Вероятно, вам следует сделать

 int depth;
for (depth=0; depth < universe.length; depth   ) {
  for (height=0; height < universe[depth].length; height   ){
    for (width=0; width < universe[depth][height].length; width  ){
        universe [depth][height][width]= 0;
    }
  }
}
 

Ответ №2:

Ваш массив universe : первый индекс должен быть 0 или 1 .

Когда вы определяете один массив, индекс начинается с нуля: введите описание изображения здесь

Смотрите также:

Java-массив

Ответ №3:

Максимальный индекс массива с размером 2 1

 int [][][] universe = new int [2][20][20]
                               ^
 

таким образом, System.out.print(universe[2][2][3]); выбрасывается ArrayIndexOutOfBoundException

Ответ №4:

Если вы хотите получить доступ к юниверсу [2] [][] , вы должны определить это с помощью

 int [][][] universe = new int[3][20][20];
 

указатели начинаются с ‘0’.