Java:关于跳出两层循环的方法以及Label(标签)

您所在的位置:网站首页 跳转标签未定义 Java:关于跳出两层循环的方法以及Label(标签)

Java:关于跳出两层循环的方法以及Label(标签)

2024-05-24 16:21| 来源: 网络整理| 查看: 265

Java:关于跳出两层循环的方法以及Label(标签) HR曾问过我这样一个问题:Java中,如何跳出两层循环?虽然当时没有说我的答案是错的,但也没完全认可。以下为对该问题的重新研究。 1. Label(标签) 标签只能存在于 循环语句 中,且只能在循环的头部位置。标签的唯一作用:当 break 和 continue 配合标签使用后可以更好地控制循环的跳转以及中断。标签的形式(位置): label:while (condition) {} label: for (condition){} 在给出示例之前需要明确 break、 continue 以及 return 的意思。 break:终止当前循环,并跳出当前循环。continue:终止当前循环的一条语句,并跳转至下一条语句。return:结束当前方法。

  示例一:(啥也没有)

package com.oop.demo01; public class Loop { public static void main(String[] args) { test1(); } private static void test1() { outerLoop: for (int i = 0; i if (j==1){ //啥也没有 } System.out.print("i"+i+" j"+j+", ");//内循环结果出现在一行 } System.out.println();//内循环结束后换行 } } }

结果一:(啥也没有) 在这里插入图片描述

示例二:(continue)

package com.oop.demo01; public class Loop { public static void main(String[] args) { test2(); } private static void test2() { outerLoop: for (int i = 0; i if (j==1){ continue;//当j==1时,终止当前循环的这一条语句,跳转至下一条,即j==2时的语句。 } System.out.print("i"+i+" j"+j+", ");//内循环结果出现在一行 } System.out.println();//内循环结束后换行 } } }

结果二:(continue) 在这里插入图片描述

示例三:(break)

package com.oop.demo01; public class Loop { public static void main(String[] args) { test3(); } private static void test3() { outerLoop: for (int i = 0; i if (j==1){ break;//当j==1时,终止当前循环,并跳出当前循环。回到了上一级循环从i==1开始。 } System.out.print("i"+i+" j"+j+", ");//内循环结果出现在一行 } System.out.println();//内循环结束后换行 } } }

结果三:(break) 在这里插入图片描述 示例四:(continue outerLoop)

package com.oop.demo01; public class Loop { public static void main(String[] args) { test4(); } private static void test4() { outerLoop: for (int i = 0; i if (j==1){ continue outerLoop;//当j==1时,终止当前循环的这一条语句,跳转至外循环,并终止当前外循环的这一条语句(导致没有输出“换行”),从i==1开始。 //得到的数据与break相同,唯一的区别是没有输出换行,导致格式不同,结果都在同一行。 } System.out.print("i"+i+" j"+j+", ");//内循环结果出现在一行 } System.out.println();//内循环结束后换行 } } }

结果四:(continue outerLoop) 在这里插入图片描述

示例五:(continue innerLoop)

package com.oop.demo01; public class Loop { public static void main(String[] args) { test5(); } private static void test5() { outerLoop: for (int i = 0; i if (j==1){ continue innerLoop;//当j==1时,终止当前循环的这一条语句,跳转至内循环,并终止当前内循环的这一条语句(重复操作),从j==2开始。 //得到的结果与continue完全相同 } System.out.print("i"+i+" j"+j+", ");//内循环结果出现在一行 } System.out.println();//内循环结束后换行 } } }

结果五:(continue innerLoop) 在这里插入图片描述

示例六:(break outerLoop)

package com.oop.demo01; public class Loop { public static void main(String[] args) { test6(); } private static void test6() { outerLoop: for (int i = 0; i if (j==1){ break outerLoop;//当j==1时,终止当前循环,跳转至外循环,并终止当前外循环。 //该结果表明:已经跳出了两层循环。 } System.out.print("i"+i+" j"+j+", ");//内循环结果出现在一行 } System.out.println();//内循环结束后换行 } } }

结果六:(break outerLoop) 在这里插入图片描述

示例七:(break innerLoop)

package com.oop.demo01; public class Loop { public static void main(String[] args) { test7(); } private static void test7() { outerLoop: for (int i = 0; i if (j==1){ break innerLoop;//当j==1时,终止当前循环,跳转至内循环,并终止当前内循环(重复操作)。 //得到的结果与break完全相同。 } System.out.print("i"+i+" j"+j+", ");//内循环结果出现在一行 } System.out.println();//内循环结束后换行 } } }

结果七:(break innerLoop) 在这里插入图片描述

示例八:(return)

package com.oop.demo01; public class Loop { public static void main(String[] args) { test8(); } private static void test8() { outerLoop: for (int i = 0; i if (j==1){ return;//结束当前方法。 //得到的结果与break outerLoop完全相同(已通过其他测试验证了不存在格式不同问题)。该结果表明:已经跳出了两层循环。 } System.out.print("i"+i+" j"+j+", ");//内循环结果出现在一行 } System.out.println();//内循环结束后换行 } } }

结果八:(return) 在这里插入图片描述

结论:

一共有八种类型如下:

啥也没有 → 完全输出continue → 终止当前循环的一条语句,并跳转至下一条语句。break → 终止当前循环,并跳出当前循环。

continue outerLoop → 看似与break几乎相同,但会跳过与内循环平行的其他语句,例如示例中的换行语句System.out.println();//内循环结束后换行。continue innerLoop → 与continue完全相同。break outerLoop → 终止当前循环,还能终止外层循环。break innerLoop → 与break完全相同。

return → 结束当前方法。看似与break outerLoop完全相同,但会跳过与外循环平行的其他语句,示例中是由于没有平行语句才并未体现。

2. 如何跳出两层循环的答案 break outerLoop: 给外循环加上 outerLoop: 的标签,在想要跳出的位置写上break outerLoop; return: 由于是直接结束了整个方法,自然也就跳出了该方法下所有的循环。

2022年05月10日新增(瞎想):自然退出(?): 等待所有循环结束,自然就退出了所有的循环。

2022年07月01日新增(tip):由于用了 return 会跳过与循环语句平行的其他未执行语句,为了避免这种情况,可以将两层循环单独抽离成一个方法,在其他方法中进行调用即可。

PS: 在C/C++语言中,有一种goto语法,与break outerLoop语法相似。 示例:

#include int n=0; int main(void) { printf("input a string: "); loop: if (getchar()!='\n') { n++; goto loop; } printf("output: %d\n",n); } 在C/C++语言中,goto语句常被用于跳出多层循环。但goto语句的使用往往会使程序的可读性降低,所以Java不允许goto跳转。在Java中,goto也是作为关键字被保留的,但这个关键字没有任何作用,只是为了将来可能的扩展,防止使用goto作为程序中的标识符。

   

—————— THE END ——————  


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3