当前位置: 首页 > 知识库问答 >
问题:

不同的功能与标签在java根据位置,在前面/后面例如:对于

田彬郁
2023-03-14

对我想知道为什么?我观察到,根据标签的放置位置,如下面的示例所示,for循环的结果是不同的,我想知道为什么?

stop1: for(int x = 0; x<5;x++) {
       for (int y = 0; y < 5; y++) {
           if (y == 2) break stop1;
           System.out.println("X and/run1 Y:" + x +"  "+ y);
           System.out.println();
       }
   }

       for(int x = 0; x<5;x++)
           stop2:{ 
               for (int y = 0; y<5; y++){
                   if(y==2) break stop2;
                   System.out.println("X and/run2 Y:" + x +"  "+ y);
                   System.out.println();
               }
           }

我在一本Java书中找到了这句话,但我不太明白它到底在说什么:

在程序中,两个嵌套的循环除了一个点是相同的。在第一组中,标签先于外部for循环。在这种情况下,当中断执行时,它会将控制转移到整个for块的末尾,跳过for循环的其余迭代。在第二组中,标签先于外部for的开头花括号。因此,当中断执行时,控制转移到外部for块的末尾,导致下一次迭代发生。

Soz用于长文本。我们将不胜感激。顺便说一句,代码的结果如下

X and/run1 Y:0  0

X and/run1 Y:0  1

X and/run2 Y:0  0

X and/run2 Y:0  1

X and/run2 Y:1  0

X and/run2 Y:1  1

X and/run2 Y:2  0

X and/run2 Y:2  1

X and/run2 Y:3  0

X and/run2 Y:3  1

X and/run2 Y:4  0

X and/run2 Y:4  1

编辑:看起来一个是Rest,另一个是继续,或者一个是Rest两个fors,而另一个只是一个fors?

共有1个答案

郁高韵
2023-03-14

程序中,两个嵌套的循环除了一个点是相同的。在第一组中,标签先于外部for循环。在这种情况下,当中断执行时,它会将控制转移到整个for块的末尾,跳过for循环的其余迭代。在第二组中,标签先于外部for的开头花括号。因此,当中断执行时,控制转移到外部for块的末尾,导致下一次迭代发生。

这是一种完全正常的行为,您的代码运行100%正常。以下是在标签上应用中断语句时发生的情况:

大多数情况下,标签直接放置在循环体的前面,如下所示:

motherLoop:
  for(int i = 0; i < 5; i++){
       //some code
            }

通常,在break motherLoop中对这个标签应用break语句实际上会中断(终止)整个循环,并且流程会从循环之后的代码部分继续。例如:

motherLoop:
  for(int i = 0; i < 5; i++){
     if(i == 2){
       break motherLoop;
          }
       System.out.println("Hey");
          }

    System.out.println("I'm done with the loop");

上面的代码生成以下输出:

我已经完成了循环

这与传统的中断声明类似。当你有多个循环时,这个概念的真正应用就出现了。现在,回到你的问题:

for(int x = 0; x<5;x++)
       stop2:{ 
           for (int y = 0; y<5; y++){
               if(y==2) break stop2;
               System.out.println("X and/run2 Y:" + x +"  "+ y);
               System.out.println();
           }
       }

在上面的代码中,当y==2时,最里面的循环(因为它是紧跟在标签前面的循环)被破坏。请注意,这不会以任何方式影响最外层的循环。这个流程从最外层循环的下一次迭代开始。

现在,这个:

stop1: for(int x = 0; x<5;x++) {
       for (int y = 0; y < 5; y++) {
           if (y == 2) break stop1;
           System.out.println("X and/run1 Y:" + x +"  "+ y);
           System.out.println();
       }
   }

y==2时,最外层的循环(因为那是紧接在标签前面的循环)被打破。这会影响最外层循环的所有内容

我希望这有帮助。。快乐的编码!

 类似资料:
  • 每当不等于零时,我必须在bgColor中显示红色,否则如果差值等于0,则显示绿色。 以这种方式,我有许多列,当差异不是零时,列应该是红色的,否则是绿色的。 jsp页面中的代码是 如果需要,我可以使用javascript根据

  • 本文向大家介绍探讨JavaScript标签位置的存放与功能有无关系,包括了探讨JavaScript标签位置的存放与功能有无关系的使用技巧和注意事项,需要的朋友参考一下 在网页中,我们可以将JavaScript代码放在html文件中任何位置,但一般放在head或body标签里面。 一般来说,<script>元素放在哪里与其的功能作用是紧密相关的,在这里讨论2种情况: 1、放在<head>里 将<sc

  • 我正在尝试制作一个图形,其中我希望在x轴上有标签和记号,但位置不同。然而,在设置第一个刻度之后,当试图定义新刻度时,之前的刻度似乎被“遗忘”。例如: 到目前为止一切顺利,有了想要的安排<代码> ABC < /代码>用于标记不同的数据点组,它们或多或少地在每个组的中间(我将在后面添加垂直线以使这种分离更加明显),但是蜱应该反映数据,而不是这些人工标签。 但如果我现在尝试向同一轴添加一组不同的记号,则

  • 问题内容: 我正在寻找有关如何在ehcache中使用此新功能后写高速缓存的指南/文档/教程?spring + jpa + ehcache + hibernate中有演示吗? 只是为了方便起见,写后缓存意味着每次我们持久化实体时,它将被写入缓存而不是正确写入数据库吗? 问题答案: 是的Ehcache报价后写高速缓存的事实并 不 意味着使用的Ehcache,像Hibernate任何软件,可以利用它无需

  • 我已经看到了一些关于寻找最小索引的问题。在这个相关的问题上有一个解决方案,它使用2个内置函数,,然后。这种方法的问题是它会对整个列表进行两次检查。是否有任何单个内置函数用于最小/最大索引?

  • 我有一个表,其中有大量的记录在数据表的帮助下分页。第一个标题列是一个全选复选框,每一行都有自己的复选框。 1)用户可以在表格中进行导航,并随机选择/取消选择复选框。 2)点击thead中的“全选”复选框,只能勾选/取消勾选当前可见的所有记录。 3)“全选”按钮应为数据表的不同页面保持一种状态(选中/未选中)。例如:如果用户单击第1页的“全选”并导航到下一页,则应取消选中“全选”复选框,再次单击该复