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 < 3; i++){innerLoop:for (int j = 0; j < 3; j++){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 < 3; i++){innerLoop:for (int j = 0; j < 3; j++){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 < 3; i++){innerLoop:for (int j = 0; j < 3; j++){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 < 3; i++){innerLoop:for (int j = 0; j < 3; j++){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 < 3; i++){innerLoop:for (int j = 0; j < 3; j++){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 < 3; i++){innerLoop:for (int j = 0; j < 3; j++){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 < 3; i++){innerLoop:for (int j = 0; j < 3; j++){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 < 3; i++){innerLoop:for (int j = 0; j < 3; j++){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<stdio.h>
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 ——————

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

  1. python 跳出两层循环

    if __name__ == '__main__':# 外循环是从0到4,内循环是从6到9,如果内循环的j大于7时,跳出两层循环.# 使用 for...else解决,如下for i in range( ...

  2. python 跳出两层循环,跳出多层循环

    pip install goto-statement @with_goto def range(start, stop):i = startresult = []label .beginif i == ...

  3. python break怎么跳出两层循环(多层循环)?添加标志量

    break2 = False while (True):// 省略while (True):// 省略if xxx:break2 = Truebreakif (break2):break 参考文章1: ...

  4. Python 骚操作 之 内层for循环如何break出外层的循环(跳出两层循环)

    In [31]: for i in range(1,5):...: for j in range(5,10):...: print(i,j)...: if j==6:...: break...: el ...

  5. 如何跳出两层循环嵌套

    #include <stdio.h> int main(){int cnt,cnt1,flag=0;for(cnt=0;cnt<5;cnt++){for(cnt1=0;cnt1< ...

  6. python跳出两层for_干货 | 收藏!16段代码入门Python循环语句

    (图片付费下载于视觉中国)作者 | 李明江 张良均 周东平 张尚佳,本文摘编自<Python3智能数据分析快速入门>来源 | 大数据(ID:hzdashuju)[导读]本文将重点讲述for ...

  7. continue / break 跳出指定层循环

    刷算法题的过程中遇到以下问题 问题: 两层循环,内层循环中存在 if 判断,当判断成立时需跳出并执行下一轮外层循环.但直接使用 continue 仅跳出内层循环. while(str = readli ...

  8. phpbreak跳出几层循环_4.2.5 PHP break语句跳出循环

    Posted by 撒得一地 on 2016年2月28日 in PHP入门教程 国外稳定加速器推荐 vypr | Nord 在使用循环语句时,有时不确定循环的次数,遇到这样的情况可以使用无限循环,如: ...

  9. 函数 —— strtok() 例如:Fred male 25,John male 62,Anna female 16两层循环

    //char *strtok(char *str, const char *delim) /*功能:  * 函数用来将字符串分割成一个个片段*/ /*参数:  * str -- 要被分解成一组小字符串 ...

最新文章

  1. asp.net 播放flash
  2. C++11 基于范围的 for 循环
  3. pipe 半双工_pipe 半双工_Linux管道PIPE的原理和应用
  4. Oracle表空间大小的限制和DB_BLOCK_SIZE的概念
  5. Python 三元表达式、列表推导式、生成器表达式
  6. oracle数据库stuff的用法,sql STUFF用法
  7. 093:QuerySet API详解-QuerySet转换为SQL的条件
  8. Vue三大核心概念之二(事件)
  9. ctrl+d与ctrl+c
  10. jquery的历史版本
  11. 苹果手机屏幕助手_苹果手机屏幕坏点测试
  12. openbci脑电帽3d打印文件下载
  13. ip获取所在城市名称接口-JAVA
  14. nodejs async.whilst用法
  15. 如何设置Sketch快捷键,Sketch提升效率的常用技巧
  16. ISCC2018 Misc WriteUp
  17. Linux_CentOS7 的桌面图标怎样变小/变小的方法
  18. imu相机标定_camera-imu内外参标定
  19. 代码生成器的使用步骤
  20. 陳三甲网络笔记:赚钱越来越难了,请摆正赚钱姿势!

热门文章

  1. 如何导出存储过程、函数、包和触发器的定义语句?如何导出表和索引的创建语句?...
  2. C++ Socket连续传输Json Base64 imencode编码的图片
  3. 【论文笔记】DOA-GAN: Dual-Order Attentive Generative Adversarial Network for Image Copy-move Forgery Detec
  4. pandas处理缺失值
  5. 一起赚美金:Niche站变现案例分享(3)
  6. 小米路由器4a千兆版刷固件_小米路由器4A千兆版恢复出厂设置的方法
  7. 海滩景色Mac高清动态壁纸
  8. 什么是沟通能力?如何提高沟通能力?
  9. 5.2 Python 赋值运算符
  10. 打光在绘画中的重要性有多重要?