【问题标题】:Multi-Dimensional Array and ArrayIndexOutOfBoundsException多维数组和 ArrayIndexOutOfBoundsException
【发布时间】:2010-03-23 17:52:33
【问题描述】:

我有一个无法解决的奇怪问题:

一个字段:

private boolean[][][] gaps;

构造函数(第一行):

gaps = new boolean[NOBARRICADES][WIDTH][HEIGHT];

构造函数(第 2 行):

for (int i = 0; i < NOBARRICADES; i++) {

Java 在第二行抛出一个错误,说:

线程“主”java.lang.ArrayIndexOutOfBoundsException 中的异常

这与 Java 语法有什么关系(错误出在这几行代码中)还是我应该在其他地方寻找问题?

【问题讨论】:

  • 假设 NOBARRICADES 在某处是一个常量 int,那么您发布的 for 循环不可能抛出异常,句号。你能发布它所做的实际代码吗?
  • 由于第二行没有数组引用,我怀疑你没有发布足够的代码让任何人帮助你。
  • 你能告诉我们你实际索引间隙的行吗?第二行实际上不是异常的来源,您的循环声明很好。我会假设你用 i 引用了数组的错误维度。还有一个提示:不要将循环变量称为简单的东西,如 i 或 j,将它们称为有用的东西,如“index”、“inner_index”、“first_index”,任何描述性的东西,尤其是当你要嵌套循环时。

标签: java arrays


【解决方案1】:

您可能误读了错误输出。您的第二行甚至不访问该数组 - 确保它不是引发异常的 for 循环主体的第一行。此外,请确保您仅使用 i 来索引数组的第一个维度

【讨论】:

    【解决方案2】:

    有时 java 编译器会偏离一两行。您可以检查显示错误的行周围的代码行,看看是否有任何发现。

    【讨论】:

    • 什么时候?以我的经验,java编译器永远不会被“一两行”关闭。唯一的区别是,如果您从运行它的服务器下载源文件,并且您使用插入换行符的 FTP 客户端以不同的格式对其进行格式化。
    • 我在使用 Java 源类时遇到了这个问题。我认为这是javadoc的问题。运行时给出一个行号,如果我检查该行,它来自完全不同的方法。
    【解决方案3】:

    抱歉,您真的不想这样做。

    多维数组永远不值得它们引起的混乱——它们根本没有正值(除了一个清晰、明显的 x,y 数组之外的可能的例外)。

    我建议您尝试从二维数组列表或二维对象数组开始,其中每个对象都包含一个列表。

    【讨论】:

      猜你喜欢
      • 2013-06-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-27
      • 2012-03-07
      • 2011-05-06
      • 2012-02-22
      相关资源
      最近更新 更多