Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/207.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java循环不迭代_Java_Android_Loops_For Loop - Fatal编程技术网

Java循环不迭代

Java循环不迭代,java,android,loops,for-loop,Java,Android,Loops,For Loop,我从这段代码中得到一个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.getSqua

我从这段代码中得到一个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和getSquarex,返回ArrayList.getx,它们在其他地方工作,但在这里不工作

for ( a = line.getSize() - 1; a >= 0; a--);
    test(a, line);   
}
在for循环的末尾有一个分号

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

去掉for循环末尾的分号,它就会工作。

你有一个分号;在for语句之后,这意味着for的主体为空。因此,这个循环将迭代,直到条件为false为止。当条件为false时,a将为-1。然后,在for循环之外,您使用以下参数调用测试方法:

test(-1, line);
这将导致IndexOutOfBounds异常

请注意,您可以访问for外部的,因为您已经在循环外部声明了它,这样即使在循环完成后也可以访问它

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

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

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

删除该文件;在for循环的末尾;它目前是for循环的主体。您可能也错过了开头{对于第一个循环。我真希望这是一个编译警告/错误,并强制将正文放在括号内或其他地方。这里的意外键入错误可能会导致严重的心痛。@Molehole它确实会显示一个警告,因为它不是一个错误。此外,如果答案对您有帮助,那么您可以将其标记为已接受,以帮助未来的访问者避免错误o站点。@Molehole如果您可以将IDE设置为自动在循环体周围添加大括号,这种情况会以惊人的速度被捕获,因为您最终会在a;周围添加大括号,而且很难漏掉。如果您能够做到这一点并启用空语句警告,则几乎不可能漏掉。