下面显示的代码旨在使用嵌套for
循环生成36个范围内的30个不同的数字。
此示例显示,当它从内部break
循环进行for
时,它将在外部执行“ update”(在此示例中,“ update”为++i
) for”循环。但是我的老师告诉我不会。
但是当我调试它时,它确实执行了“更新”。 我说得对吗?
public class array {
public static void main(String[] args) {
int a[] = new int[30];
for( int i=0;i<a.length;++i)
{
a[i] = (int)( Math.random()*36 ) +1;
for(int j=0;j<i;++j)
{
if(a[i]==a[j])
{
--i;
break;
}
}
}
for( int num: a) System.out.print( num+" " );
System.out.println();
}
}
答案 0 :(得分:10)
该break
打破了内部循环。外循环继续for
(++i
)的更新部分。如果您的老师告诉您++i
不会这样做,那他/她是错的。如果执行了++j
,则不执行内部更新(break
),而执行外部更新。
为了清楚起见,我们正在谈论相同的事情:
int a[] = new int[30];
for (int i = 0; i < a.length; ++i) {
// Outer update ----------^^^
a[i] = (int) (Math.random() * 36) + 1;
for (int j = 0; j < i; ++j) {
// Inner update ---^^^
if (a[i] == a[j]) {
--i;
break; // <==== This break
}
}
}
for (int num : a) {
System.out.print(num + " ");
}
System.out.println();
答案 1 :(得分:1)
break
关键字仅中断内循环,外循环仍按预期执行,并且发生++i
。
如果您的老师说的话,他/她可能犯了一个错误。
这是另一个演示:
//outer loop
for(...){
//inner loop
for(...){
if(...){
break;
}
}
}
如果满足if-body中的条件,则内部循环会中断,但外部循环仍会按预期继续。
我希望这会有所帮助。.编码愉快!