在带有标签break的三层嵌套for循环中,为什么当标签break位于内循环和中间循环时输出相同?

问题描述 投票:0回答:1

为什么当标记的中断位于中循环和内循环开始之前时,输出完全相同?

示例代码 1 - 当断点位于内循环开始时

        for(int i = 1;  i <= 3; i++)
        {
            //breakpoint: 
            for (int j = 1; j <= 3; j++)
            {
                breakpoint:                
                for(int k = 1; k <= 3; k++)
                {
                    if (i==2)
                        break breakpoint;
                        
                    System.out.println(i + " " + j + " " + k);

                }
            }
        }

输出为:

1 1 1
1 1 2
1 1 3
1 2 1
1 2 2
1 2 3
1 3 1
1 3 2
1 3 3
3 1 1
3 1 2
3 1 3
3 2 1
3 2 2
3 2 3
3 3 1
3 3 2
3 3 3

示例代码2 - 当断点位于中间循环的开头时

        // breakpoint: 
        for(int i = 1;  i <= 3; i++)
        {
            breakpoint: 
            for (int j = 1; j <= 3; j++)
            {
               // breakpoint:                
                for(int k = 1; k <= 3; k++)
                {
                    if (i==2)
                        break breakpoint;
                        
                    System.out.println(i + " " + j + " " + k);

                }
            }
        }

输出是相同的:

1 1 1
1 1 2
1 1 3
1 2 1
1 2 2
1 2 3
1 3 1
1 3 2
1 3 3
3 1 1
3 1 2
3 1 3
3 2 1
3 2 2
3 2 3
3 3 1
3 3 2
3 3 3

示例代码 3 - 当断点位于外循环的开头时

        breakpoint: 
        for(int i = 1;  i <= 3; i++)
        {
            //breakpoint: 
            for (int j = 1; j <= 3; j++)
            {
               // breakpoint:                
                for(int k = 1; k <= 3; k++)
                {
                    if (i==2)
                        break breakpoint;
                        
                    System.out.println(i + " " + j + " " + k);

                }
            }
        }

输出为:

1 1 1
1 1 2
1 1 3
1 2 1
1 2 2
1 2 3
1 3 1
1 3 2
1 3 3

我将断点的位置从内循环改为中循环再到外循环。当断点位于内部循环和中间循环的开头时,我预计输出会彼此不同。

为什么无论断点位于内循环还是中循环,输出结果都是一样的?

java nested-loops break labeled-statements
1个回答
0
投票

输出是相同的,因为您在

System.out.println
语句之前立即中断,并且条件
i == 2
不会改变,直到外循环进入下一次迭代。在这种情况下,中间循环运行更多次并不重要。

当标签放在内环上并且

i == 2

  • 在中间循环的每次迭代中,我们开始内循环的迭代
  • 每次内循环第一次迭代时,我们立即跳出内循环而不输出任何内容
  • 中间循环的下一次迭代以与上面完全相同的方式运行
  • 在中间循环的最后一次迭代之后,外层循环继续下一次迭代
    i = 3

当标签放在中间环上并且

i == 2

  • 在中间循环的第一次迭代中,我们开始内循环的迭代
  • 在内循环的第一次迭代中,我们跳出中间循环而不输出任何内容
  • 外循环的下一次迭代继续,现在
    i = 3
© www.soinside.com 2019 - 2024. All rights reserved.