当它从Java的内部“ for”循环中“中断”时,它将“更新”吗?

时间:2018-12-21 08:26:52

标签: java

下面显示的代码旨在使用嵌套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();
    }
}

2 个答案:

答案 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中的条件,则内部循环会中断,但外部循环仍会按预期继续

我希望这会有所帮助。.编码愉快!