【问题标题】:Why is this giving me this arrayoutofbounds error?为什么这会给我这个 arrayoutofbounds 错误?
【发布时间】:2014-02-19 22:24:59
【问题描述】:

我有这些 while 循环和 for 语句。它正在做我想做的事,打印数组的特定部分。但是,我不断收到越界声明。我想不通。我觉得我的 if 语句应该防止索引变得更大。

注意:我已经有一个除此之外的方法来创建这个数组并初始化它的值,所以假设数组是二维的。

有什么建议可以防止它越界吗?

目的是,我希望列和行都增加一,直到它们不能再增加。

    int columnincrement = 0;
    String spacing = "\t";
    int diagcol=0;
    int diagrow=0;
    while(diagcol<themainarray[columnincrement].length)
    {

            System.out.println(spacing+themainarray[diagcol][diagrow]);
            spacing+= "\t";
            System.out.print("\n");

            if (diagcol<=themainarray[columnincrement].length)
            {   

            columnincrement++;
            diagcol++;
            diagrow++;

            }


    }

【问题讨论】:

  • 考虑实际调试问题。
  • (完整的异常消息是什么?异常消息很可能会告诉您到底出了什么问题。)
  • Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3 at TwoDimensionalArray.mainDiagonal(TwoDimensionalArray.java:162) at TwoDimensionalArray.main(TwoDimensionalArray.java:38))
  • themainarray 有多大?
  • 请注意,您的两个 while 语句正在测试数组的相同维度,因此当您到达末尾时,几乎可以保证在第一个 while 中出现异常。

标签: java arrays debugging


【解决方案1】:

数组是从 0 开始的。

arr[arr.length] 也会抛出异常

将您的 if 语句更改为以下内容,*注意 &lt;-1

if (diagcol<themainarray[columnincrement].length - 1)

如果您进行了更改,至少您的代码有可能在没有 indexoutofbounds 异常的情况下运行。这不是 100% 的机会。


如果themainarray.length 小于themainarray[columnincriment].length,你也会得到一个异常,因为你没有检查themainarray.length

【讨论】:

  • 还有很多关于你的代码的其他东西不是最佳实践,但我不想把帖子弄得太乱
  • 是因为while循环吗?我最初拥有它们作为 for 循环,但我得到了例外。我想我会尝试别的。
  • @munchschair 更多的是关于您使用digacol 来检查由其他值索引的数组的长度
  • 这本身不是错误,它只是草率的编码。如果你打算像这样互换使用这些值,你不妨只使用 1 个值。
  • 我不知道 digacol 是什么。我很n00b,所以我真的愿意接受任何建议。
【解决方案2】:

我认为你检查了错误的东西。看起来在 while 中您想要 d2array 的第一部分中的项目数量,而 if 语句中您想要 2darray 第二部分中的项目数量。这可能有效:

int columnincrement = 0;

String spacing = "\t";
int diagcol=0;
int diagrow=0;
while(diagcol<themainarray.length) {
        System.out.println(spacing+themainarray[diagcol][diagrow]);
        spacing+= "\t";
        System.out.print("\n");

        if (diagrow<=themainarray[columnincrement].length) {   
            columnincrement++;
            diagcol++;
            diagrow++;
        }

}

【讨论】:

    猜你喜欢
    • 2013-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-31
    • 1970-01-01
    • 2011-09-07
    • 1970-01-01
    相关资源
    最近更新 更多