Java 2D数组无法将值写入最后一个值索引

时间:2018-11-11 17:34:52

标签: java arrays multidimensional-array nullpointerexception 2d

我的Java 2D阵列有问题。

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 :(得分:1)

因为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;
    }
}

答案 1 :(得分:0)

对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;
    }
}

答案 2 :(得分:0)

从两个循环中删除等于

    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

答案 3 :(得分:0)

在Java中,数组索引从0length-1

因此,在您的情况下,从0y-1 = 4,从0x-1 = 3。您的输出似乎完全正常。 j的第一个值应为0。j有5个不同的值,而l有4个不同的值。

在for循环中将<=改回<。 (这部分会导致错误:l不能从04,只能从03