2D-массив Java не может записывать значения в индекс последних значений - PullRequest
0 голосов
/ 11 ноября 2018

У меня проблема с моим 2D-массивом Java.

int y = 5;
int x = 4;
int[][] map = new int[y][x];

for (int j = 0; j <= y ; j++) {
    for (int l = 0; l <=x; l++) {
        System.out.println("j: " + j + " l: " + l);
        map[j][l] = 1;
    }
}

Java выдает это исключение, когда достигает последних значений в массиве:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 4

Изменение цикла for на "j

Picture showing the changed code ( < instead of <=

Есть ли способ исправить это, я что-то упустил?

Ответы [ 4 ]

0 голосов
/ 11 ноября 2018

В java индекс массива от 0 до length-1.

Итак, в вашем случае от 0 до y-1 = 4 и от 0 до x-1 = 3. Ваш вывод кажется вполне нормальным. Первое значение j должно быть 0. У вас есть 5 разных значений для j и 4 разных значения для l.

Измените обратно <= на < в цикле for. (Эта часть вызывает ошибку: l не может перейти от 0 до 4, только от 0 до 3)

0 голосов
/ 11 ноября 2018

Поскольку массивы в Java индексируются 0, длина массива составляет , а не допустимый индекс. По этой причине вы должны использовать < вместо <= в цикле for:

for (int j = 0; j < y; j++) {
    for (int l = 0; l < x; l++) {
        System.out.println("j: " + j + " l: " + l);
        map[j][l] = 1;
    }
}
0 голосов
/ 11 ноября 2018

Удалить равно из обеих петель

    int y = 5;
    int x = 4;
    int[][] map = new int[y][x];

    for (int j = 0; j < y; j++) {
        for (int l = 0; l < x; l++) {
            System.out.println("j: " + j + " l: " + l);
            map[j][l] = 1;
        }
    }

Нет столбца с 5, поскольку его размер равен 5. Таким образом, индексы идут как 0, 1, 2, 3, 4. То же самое относится и к строке 4. Поскольку размер равен 4, индексы будут иметь вид 0, 1, 2, 3

0 голосов
/ 11 ноября 2018

Java arrays проиндексированы 0, поэтому удалите = в цикле for.

int y = 5;
int x = 4;
int[][] map = new int[y][x];

for (int j = 0; j < y ; j++) {
    for (int l = 0; l <x; l++) {
        System.out.println("j: " + j + " l: " + l);
        map[j][l] = 1;
    }
}
...