java 从try中跳出_Java跳出多重循环 - osc_b7xn6aes的个人空间 - OSCHINA - 中文开源技术交流社区...

本文介绍了在Java中如何跳出多重循环,包括使用break结合标志位、利用break标签以及通过try-catch抛异常的方法,并对各种方案的优缺点进行了分析。
摘要由CSDN通过智能技术生成

场景:很多的时候需要做到跳出多重循环,而在Java中虽然后goto关键字,但是是保留字,并没有启用。而在处理分支结构的if...else,switch...case,好像都达不到想要的效果。

作为终止当前代码的return并不能完成业务需求,能用到的只有break,但是break只能跳出当前的循环。

代码示例:break

private static voidtestBreak() {for (int i = 0; i < 3; i++) {for (int j = 0; j < 5; j++) {

System.out.println("testBreak==j==" +j);if (j == 2)break;

}

System.out.println("testBreak==i====>>>" +i);

}

System.out.println("testBreak======>>>END");

}

结果:

testBreak==j==0testBreak==j==1testBreak==j==2testBreak==i====>>>0testBreak==j==0testBreak==j==1testBreak==j==2testBreak==i====>>>1testBreak==j==0testBreak==j==1testBreak==j==2testBreak==i====>>>2testBreak======>>>END

结论:所有的执行到 j==2 的时候都会终止但是只能跳出当前循环。

解决方案一:继续使用break,但是在添加一个flag作为判断条件,每次判断条件的时候都会判断循环和flag.

代码:

private static voidoutloopByBreak() {boolean flag = true;for (int i = 0; i < 3 && flag; i++) {for (int j = 0; j < 5; j++) {

System.out.println("outloopByBreak==j==" +j);if (j == 2) {

flag= false;break;

}

}

System.out.println("outloopByBreak==i====>>>" +i);

}

System.out.println("outloopByBreak======>>>END");

}

结果:

outloopByBreak==j==0outloopByBreak==j==1outloopByBreak==j==2outloopByBreak==i====>>>0outloopByBreak======>>>END

结论:能解决跳出循环的问题,但是是会在内部循环的完成之后继续往下执行,知道下次判断才会跳出循环。

解决方案二:Java中break有一种用法可以做到类似goto的效果,在需要跳出的循环之前加一个标志之后break 标志;可以做到跳出循环(推荐使用)。

代码:

private static voidoutloopByBreakLikeGoto() {

flag:for (int i = 0; i < 3; i++) {for (int j = 0; j < 5; j++) {

System.out.println("outloopByBreakLikeGoto==j==" +j);if (j == 2) breakflag;

}

System.out.println("outloopByBreakLikeGoto==i====>>>" +i);

}

System.out.println("outloopByBreakLikeGoto======>>>END");

}

结果:

outloopByBreakLikeGoto==j==0outloopByBreakLikeGoto==j==1outloopByBreakLikeGoto==j==2outloopByBreakLikeGoto======>>>END

结论:做到了类似goto的效果

解决方案三:try...catch方式也能做到跳出多重循环的效果

代码:

private static voidoutloopByTryCatch() {try{for (int i = 0; i < 3; i++) {for (int j = 0; j < 5; j++) {

System.out.println("outloopByTryCatch==j==" +j);if (j == 2)throw newException();

}

System.out.println("outloopByTryCatch==i====>>>" +i);

}

}catch(Exception e) {

System.out.println("====>>outloopByTryCatch跳出");

}

System.out.println("outloopByTryCatch======>>>END");

}

结果:

outloopByTryCatch==j==0outloopByTryCatch==j==1outloopByTryCatch==j==2

====>>outloopByTryCatch跳出

outloopByTryCatch======>>>END

结论:用抛异常的方式跳出,但是不推荐

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值