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

标签 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 < y”和“l < x”有助于解决问题,但第 5 列和第 4 行显然没有打印出来。

Picture showing the changed code ( < instead of <=

有什么办法可以解决这个问题吗?我错过了什么吗?

最佳答案

因为Java中的数组是0 -indexed,数组的长度不是有效的索引。因此,您应该使用 <而不是<=在你的 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;
    }
}

关于Java 2D 数组无法将值写入最后一个值索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53251384/

相关文章:

java - 托管 Java Web Start 应用程序以包含在 Linux 发行版中

java - 是否有机会从现有本体中找到特定类并使用 jena 添加等效类

c++ - 在 C++ 中的二维数组中设置值

java - 安卓远程控制客户端

java - 是否可以在没有调度程序的情况下使用 Apache Airflow 来执行编排任务?

arrays - 压缩给定的数组问题

javascript - 如何使用Javascript过滤方法返回多个结果?

c++ - 当你有一个二维数组(在 C++ 中)时,调用析构函数的正确方法是什么?

c - 使用函数打印二维数组

c - 在c中打印多维数组