`
MoonMonster
  • 浏览: 35808 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

使用一个break跳出多重循环

    博客分类:
  • Java
阅读更多
大家都知道,java中的break是用来跳出循环的,例如
public class Test {
	public static void main(String[] args) {
		for(int i=0; i<10; i++){
			System.out.print(i + " ");
			if(i == 5){
				break;
			}
		}
	}
}

可以看到输出   0 1 2 3 4 5
很明显的这只是跳出一层循环,其实break的作用远不止于此。
例如,可以设置标签,让它在条件达到时,直接终止之后的循环,跳到标签出:
public class Test {

	public static void main(String[] args) {
		L:
		for(int i=0; i<10; i++){
			for(int j=0; j<10; j++){
				for(int k=0; k<10; k++){
					System.out.print(k + " ");
					if(k == 5){
						break L;
					}
				}
			}
		}
	}
}

会输出: 0 1 2 3 4 5
因为标签在最外层循环,所以整个三层循环都已经终止。
既然可以跳出最外层循环,那么也可以跳到任意一层循环中?试试,
为了使输出少一点,稍微改下循环次数:
public class Test {

	public static void main(String[] args) {
		for(int i=0; i<2; i++){
			L:
			for(int j=0; j<2; j++){
				for(int k=0; k<10; k++){
					System.out.print(k + " ");
					if(k == 5){
						break L;
					}
				}
			}
		}
	}
}

也可以看到预料的输出:0 1 2 3 4 5 0 1 2 3 4 5
那么不妨再多思考下,java的break能否像C语言的goto一样,跳到任意位置?同样用例子试下,第一次我们试着把标签放到整个循环之后去:
public class Test {

	public static void main(String[] args) {
		for(int i=0; i<2; i++){
			for(int j=0; j<2; j++){
				for(int k=0; k<10; k++){
					System.out.print(k + " ");
					if(k == 5){
						break L;
					}
				}
			}
		}
		
		L:
			System.out.println("跳到这儿了");
	}
}

但想法是好的,现实是残酷的,在编译时便已经报错:
The label L is missing.
好吧,既然是找不到L标签的位置,那么我把L标签放到循环上方去好了:
public class Test {

	public static void main(String[] args) {
		L:
			System.out.println("跳到这儿了");
		System.out.println("接下来开始for循环:");
		for(int i=0; i<2; i++){
			for(int j=0; j<2; j++){
				for(int k=0; k<10; k++){
					System.out.print(k + " ");
					if(k == 5){
						break L;
					}
				}
			}
		}
	}
}

然后还是报了同样的错:The label L is missing.
此段程序跟第二段程序相比,只是中间多了段代码,如果把标签L与循环之间的输出语句去掉的话,可以看到就没有错了。
既然最外层循环与标签间不能有其他语句,那我在多层循环之间可否添加呢?
public class Test {

	public static void main(String[] args) {
		
		for(int i=0; i<2; i++){
			L:
				System.out.println("跳到这儿了");
			for(int j=0; j<2; j++){
				for(int k=0; k<10; k++){
					System.out.print(k + " ");
					if(k == 5){
						break L;
					}
				}
			}
		}
	}
}

同样的错:The label L is missing.
好吧,还是不行,那我再换种思路,既然标签是在for循环中使用的,那么我标签后再加上一个for循环可否?
public class Test {

	public static void main(String[] args) {
		
		for(int i=0; i<2; i++){
			L:
				for(int m=0; m<10; m++){
					
				}
			for(int j=0; j<2; j++){
				for(int k=0; k<10; k++){
					System.out.print(k + " ");
					if(k == 5){
						break L;
					}
				}
			}
		}
	}
}

同样的错:The label L is missing.

再多发散思维思考下,既然在for循环中可以这样使用,那么while循环也一样?
public class Test {

	public static void main(String[] args) {
		
		int i = 0;
		L:
		while(true){
			while(true){
				System.out.print(i+" ");
				i ++;
				if(i == 5){
					break L;
				}
			}
			
		}
	}
}

亲测可行,看到输出 0 1 2 3 4 。

所以可以得出以下结论:
1.break可以用来跳出一层循环。
2.如果加上标签,在break后添上标签名,可以用来跳出任意层循环。
3.标签与for语句之间不能有其他任何语句,即使是另一个for循环也不行。
4.java中的break不能像C语言中的goto一样使用。
5.for循环与while循环中的标签同样使用方法。
分享到:
评论
2 楼 MoonMonster 2015-12-11  
再看,发现中间有段体现自己好无知。
1 楼 BS_YG 2015-11-29  
666,之前上网看socket的代码还奇怪loop是什么意思,这回懂了。
loop: while (true) {
switch (c = in.read()) {
case -1:
case '\n':
break loop;
case '\r':
int c2 = in.read();
if ((c2 != '\n') && (c2 != -1)) in.unread(c2);
break loop;

相关推荐

    js跳出多重循环

    js跳出多重循环 ,传统的break 和continue的意思,continue的意思是忽略此次循环,开始下次,着重说明break

    PHP中使用break跳出多重循环代码实例

    主要介绍了PHP中使用break跳出多重循环代码实例,本文直接给出代码,代码简洁易一懂,一看就明白了,需要的朋友可以参考下

    javaScript如何跳出多重循环break、continue

    主要为大家详细介绍了javaScript如何跳出多重循环break、continue,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

    Java跳出多重嵌套循环

     我们可以在循环体开头设置一个标志位,也是设置一个标记,然后使用带此标号的break语句跳出多重循环。 public class BreaklFor { public static void main(String args[]){ OK: //设置一个标记 使用带此标记...

    Python跳出多重循环的方法示例

    主要介绍了Python跳出多重循环的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    Python中断多重循环的思路总结

    然而,我们有时候会需要跳出多重循环,而break只能够跳出一层循环,比如: for i in range(10): for j in range(10): if i+j &gt; 5: print i,j break 这样的代码并非说找到一组 i+j &gt; 5就停止,而是连续找到10组...

    在Java中如何跳出当前的多重嵌套循环?

    在Java中,要想跳出多重循环,可以在外面的循环语句前定义一个标号,然后在里层循环体的代码中使用带有标号的break 语句,即可跳出外层循环。例如: ok: for(int i=0;i&lt;10;i++) { for(int j=0;j&lt;10;j++) ...

    Python中断多重循环的几种方式详解

    这篇文章主要介绍了Python中断多重循环的几种方式详解,文中通过示例代码介绍的非常...然而,我们有时候会需要跳出多重循环,而break只能够跳出一层循环,比如 for i in range(10): for j in range(10): if i+j &gt; 5:

    C语言中break语句的全部用法及示例

    当在C语言中使用break时,通常用于跳出当前循环结构(如for循环、while循环、...break关键字只能退出一个循环体,文中列举了几个使用场景,并赋予了简单的例子,方便学习: 1.结束循环 2.结束switch语句 3.跳出多重循环

    C语言程序设计标准教程

    使用printf函数时还要注意一个问题, 那就是输出表列中的求值顺序。不同的编译系统不一定相同,可以从左到右, 也可从右到左。Turbo C是按从右到左进行的。如把例2.13改写如下述形式: void main(){ int i=8; printf...

    javascript实现label标签跳出循环操作

    首先我们来说说为什么需要label标签,虽然我们已经知道有break,continue跳出循环,但如果是多重循环那么它们就显的无能为力了,所以就出现了label这个标签来为我们服务。 我们先来看看单独使用break的情况 for...

    Java面试宝典2017

    在JAVA 中,如何跳出当前的多重嵌套循环?【基础】 答:在最外层循环前加label 标识,然后用break:label 方法即可跳出多重循环。

    张孝祥java就业面试宝典

    在Java中,要想跳出多重循环,可以在外面的循环语句前定义一个标号,然后在里层循环体的代码中使用带有标号的break 语句,即可跳出外层循环。例如, ok: for(int i=0;i;i++) { for(int j=0;j;j++) { ...

    Java面试宝典(传说中的葵花宝典).doc

    在Java中,要想跳出多重循环,可以在外面的循环语句前定义一个标号,然后在里层循环体的代码中使用带有标号的break 语句,即可跳出外层循环。例如, ok: for(int i=0;i;i++) { for(int j=0;j;j++) { System....

    Java复习大纲面试题.doc

    4.Java当中如何跳出多重循环? 使用break label; 5.JAVA的数据类型分为哪几类? 基本数据类型和引用数据类型 6.String/StringBuffer/StringBuilder的区别是什么? String:不可变 StringBuffer:可变,并且线程安全,...

    aybook.cn_c++jiaocheng0105.rar

    3.4 变量的初始化 3.5 运算符 3.6 表达式第4章 程序控制语句 4.1 if语句 4.2 for循环 4.3 switch语句 4.4 while循环 4.5 do-while循环 4.6 使用continue 4.7 用break跳出循环 4.8 嵌套循环 4.9 使用goto语句 4.10 ...

    涵盖了90%以上的面试题

    break如果跳出多重循环 final,finally和finalize有什么区别 使用switch时有哪些注意事项 instanceof有什么作用 什么是不可变类 类型转换 Math类的round,ceil和floor方法 值传递和引用传递有什么不同? char型变量是否...

    PHP基础教程 是一个比较有价值的PHP新手教程!

    使用new语句产生一个对象: class foo { function do_foo () { echo "Doing foo."; } } $bar = new foo; $bar-&gt;do_foo(); 改变变量类型 在PHP手册中提到:"PHP不支持(也不需要)直接在声明变量时定义变量类型;...

Global site tag (gtag.js) - Google Analytics