在Java redux中打破嵌套循环
本页后续内容:Breaking out of nested loops in Java
这段代码运行得很好(是数独解算器的一部分,所以p是一个9x9表):
int r = 0, c = 0;
out:
for(r = 0; r < 9; ++r){
for (c = 0; c < 9; ++c){
if (p[r][c] == 0){
break out;
}
}
}
// do stuff with r, c
但是这个代码失败了!唯一的变化是for循环的“init”部分是空的
int r = 0, c = 0;
out:
for( ; r < 9; ++r){
for ( ; c < 9; ++c){
if (p[r][c] == 0){
break out;
}
}
}
// processes first row of array as it should, then breaks out with r=9, c=9
由于r
和c
是在循环之上定义和初始化的,这些块应该做完全相同的事情,但它们没有。有人知道为什么会这样吗
# 1 楼答案
是的,问题是第二个循环需要
c
重置为0
,否则它只会在外部循环的第一次迭代中运行。第二次通过(例如,当r = 1
)c
将已经是9
并且不会输入循环体。所以,你需要或者