Java:关于跳出两层循环的方法以及Label(标签)
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;
- 给外循环加上 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(标签)相关推荐
- python 跳出两层循环
if __name__ == '__main__':# 外循环是从0到4,内循环是从6到9,如果内循环的j大于7时,跳出两层循环.# 使用 for...else解决,如下for i in range( ...
- python 跳出两层循环,跳出多层循环
pip install goto-statement @with_goto def range(start, stop):i = startresult = []label .beginif i == ...
- python break怎么跳出两层循环(多层循环)?添加标志量
break2 = False while (True):// 省略while (True):// 省略if xxx:break2 = Truebreakif (break2):break 参考文章1: ...
- 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 ...
- 如何跳出两层循环嵌套
#include <stdio.h> int main(){int cnt,cnt1,flag=0;for(cnt=0;cnt<5;cnt++){for(cnt1=0;cnt1< ...
- python跳出两层for_干货 | 收藏!16段代码入门Python循环语句
(图片付费下载于视觉中国)作者 | 李明江 张良均 周东平 张尚佳,本文摘编自<Python3智能数据分析快速入门>来源 | 大数据(ID:hzdashuju)[导读]本文将重点讲述for ...
- continue / break 跳出指定层循环
刷算法题的过程中遇到以下问题 问题: 两层循环,内层循环中存在 if 判断,当判断成立时需跳出并执行下一轮外层循环.但直接使用 continue 仅跳出内层循环. while(str = readli ...
- phpbreak跳出几层循环_4.2.5 PHP break语句跳出循环
Posted by 撒得一地 on 2016年2月28日 in PHP入门教程 国外稳定加速器推荐 vypr | Nord 在使用循环语句时,有时不确定循环的次数,遇到这样的情况可以使用无限循环,如: ...
- 函数 —— strtok() 例如:Fred male 25,John male 62,Anna female 16两层循环
//char *strtok(char *str, const char *delim) /*功能: * 函数用来将字符串分割成一个个片段*/ /*参数: * str -- 要被分解成一组小字符串 ...
最新文章
- asp.net 播放flash
- C++11 基于范围的 for 循环
- pipe 半双工_pipe 半双工_Linux管道PIPE的原理和应用
- Oracle表空间大小的限制和DB_BLOCK_SIZE的概念
- Python 三元表达式、列表推导式、生成器表达式
- oracle数据库stuff的用法,sql STUFF用法
- 093:QuerySet API详解-QuerySet转换为SQL的条件
- Vue三大核心概念之二(事件)
- ctrl+d与ctrl+c
- jquery的历史版本
- 苹果手机屏幕助手_苹果手机屏幕坏点测试
- openbci脑电帽3d打印文件下载
- ip获取所在城市名称接口-JAVA
- nodejs async.whilst用法
- 如何设置Sketch快捷键,Sketch提升效率的常用技巧
- ISCC2018 Misc WriteUp
- Linux_CentOS7 的桌面图标怎样变小/变小的方法
- imu相机标定_camera-imu内外参标定
- 代码生成器的使用步骤
- 陳三甲网络笔记:赚钱越来越难了,请摆正赚钱姿势!
热门文章
- 如何导出存储过程、函数、包和触发器的定义语句?如何导出表和索引的创建语句?...
- C++ Socket连续传输Json Base64 imencode编码的图片
- 【论文笔记】DOA-GAN: Dual-Order Attentive Generative Adversarial Network for Image Copy-move Forgery Detec
- pandas处理缺失值
- 一起赚美金:Niche站变现案例分享(3)
- 小米路由器4a千兆版刷固件_小米路由器4A千兆版恢复出厂设置的方法
- 海滩景色Mac高清动态壁纸
- 什么是沟通能力?如何提高沟通能力?
- 5.2 Python 赋值运算符
- 打光在绘画中的重要性有多重要?