【问题标题】:Java loop not iterating [closed]Java循环不迭代[关闭]
【发布时间】:2014-06-17 18:38:44
【问题描述】:

我从这段代码中得到一个 IndexOutOfBounds 错误:

Log.w("aa", "line size: " + line.getSize());
for ( a = line.getSize() - 1; a >= 0; a--);
   test(a, line);   
}

public void test(int a, LineCreator line){
   Log.w("AA", "a equals: " + a);
   int test = line.getSquare(a);
}

06-17 21:31:42.169 421-442/com.Nuotta W/aa﹕行大小:3

06-17 21:31:42.169 421-442/com.Nuotta W/AA:a 等于:-1

它得到的行大小是 3。但它给出了 -1。

LineCreator 是我的一个对象。它有非常简单的方法 getSize 只返回 Array.length 和 getSquare(x) 返回 ArrayList.get(x) 它们在其他地方工作,但不是在这里。

【问题讨论】:

  • 删除; 循环末尾的for;它目前是您的 for 循环的主体。
  • 您可能还错过了第一个循环的开头 {。
  • 我真的希望这是一个编译警告/错误,并强制将正文放入括号或其他内容中。此处的意外输入错误可能会导致严重的心痛。

标签: java android loops for-loop


【解决方案1】:
for ( a = line.getSize() - 1; a >= 0; a--);
    test(a, line);   
}

你的 for 循环末尾有一个分号。

发生的情况是 for 循环循环但从不执行 test。因此,a 通过迭代设置为 -1,然后调用 test

去掉for循环末尾的分号就可以了。

【讨论】:

  • @Molehole 它确实显示警告,因为它不是错误。此外,如果某个答案对您有帮助,那么您可以将其标记为已接受,以帮助该网站的未来访问者。
  • @Molehole 如果您可以将 IDE 设置为自动在循环体周围添加大括号,这种事情会以惊人的速度被捕获,因为您最终会在 ; 周围加上大括号,这非常困难错过。如果你能做到这一点并启用关于空语句的警告,就几乎不可能错过。
【解决方案2】:

for 语句后面有一个分号;,这意味着for正文。所以,这个循环将迭代直到条件为false。当条件为假时,a 将是-1。然后,在for 循环之外,您将调用test 方法,并带有以下参数:

test(-1, line);

这将导致IndexOutOfBounds 异常。

请注意,您可以在 for 之外访问 a,因为您已在循环之外 声明它,即使在循环结束后也可以访问它。

为了更好的可视化,你的代码相当于:

for ( a = line.getSize() - 1; a >= 0; a--) {
    // empty
}

test(a, line);    // here 'a' will be -1

【讨论】:

    猜你喜欢
    • 2015-03-02
    • 2014-10-28
    • 2022-12-21
    • 2012-09-15
    • 1970-01-01
    • 2015-03-15
    • 2015-05-19
    • 2012-08-08
    • 2013-11-30
    相关资源
    最近更新 更多