Java中从内循环跳出外循环

最近在面试的时候被人问到java中如何从内循环跳出外循环,当时没想出来,不过觉得挺有意思的,琢磨了一下,整理如下:

看下面一段代码:

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

正常执行的话,会输出如下结果:

i=0,j=0
i=1,j=0
i=1,j=1
i=2,j=0
i=2,j=1
i=2,j=2
i=3,j=0
i=3,j=1
i=3,j=2
i=3,j=3
i=4,j=0
i=4,j=1
i=4,j=2
i=4,j=3
i=4,j=4
i=5,j=0
i=5,j=1
i=5,j=2
i=5,j=3
i=5,j=4
i=5,j=5
i=6,j=0
i=6,j=1
i=6,j=2
i=6,j=3
i=6,j=4
i=6,j=5
i=6,j=6
i=7,j=0
i=7,j=1
i=7,j=2
i=7,j=3
i=7,j=4
i=7,j=5
i=7,j=6
i=7,j=7
i=8,j=0
i=8,j=1
i=8,j=2
i=8,j=3
i=8,j=4
i=8,j=5
i=8,j=6
i=8,j=7
i=8,j=8
i=9,j=0
i=9,j=1
i=9,j=2
i=9,j=3
i=9,j=4
i=9,j=5
i=9,j=6
i=9,j=7
i=9,j=8
i=9,j=9

内循环的break并没有退出外循环,这就达不到我们的目的。

项改进的话可以有三种办法:

一.给循环定义语句标签,java定义这个语句标签的目的好像就是为了用来表示循环,可能也是一种变相的实现goto语句的方法吧,修改后代码如下:

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

二.设置一个flag,在每次执行外循环的时候判断是不是需要跳出循环,在内循环里设置这个标记,相当于内循环通知外循环需要跳出就跳出,代码如下:

	public static void main(String[] args) {
		boolean stepOut = false;
		for(int i=0;i<10;i++){
			if (stepOut) {
			break;
		     }
	        for(int j=0;j<10;j++){
	        	System.out.println("i="+i+",j="+j);
	        	if(i==j){
	        		stepOut = true;
	        	    break;
	        	}
	        }
	    }
	}

三.把循环部分剥离出来成为一个独立的函数,在需要跳出循环时直接return(但是这种办法要考虑好返回值和传入参数的问题)代码如下:

	public static void main(String[] args) {
		getResult();
	}	
	private static void getResult() {
		for(int i=0;i<10;i++){
	        for(int j=0;j<10;j++){
	        	System.out.println("i="+i+",j="+j);
	        	if(i==j){
	        		return;
	        	}
	        }
	    }
	}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值