Java跳出多重循环

From: https://www.cnblogs.com/fastfn/p/9777067.html

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

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

代码示例:break

复制代码

        private static void testBreak() {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==0
testBreak==j==1
testBreak==j==2
testBreak==i====>>>0
testBreak==j==0
testBreak==j==1
testBreak==j==2
testBreak==i====>>>1
testBreak==j==0
testBreak==j==1
testBreak==j==2
testBreak==i====>>>2
testBreak======>>>END

复制代码

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

 

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

代码:

复制代码

       private static void outloopByBreak() {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==0
outloopByBreak==j==1
outloopByBreak==j==2
outloopByBreak==i====>>>0
outloopByBreak======>>>END

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

 

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

代码:

复制代码

    private static void outloopByBreakLikeGoto() {flag: for (int i = 0; i < 3; i++) {for (int j = 0; j < 5; j++) {System.out.println("outloopByBreakLikeGoto==j==" + j);if (j == 2) break flag;}System.out.println("outloopByBreakLikeGoto==i====>>>" + i);}System.out.println("outloopByBreakLikeGoto======>>>END");}

复制代码

结果:

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

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

 

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

代码:

复制代码

        private static void outloopByTryCatch() {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 new Exception();}System.out.println("outloopByTryCatch==i====>>>" + i);}} catch (Exception e) {System.out.println("====>>outloopByTryCatch跳出");}System.out.println("outloopByTryCatch======>>>END");}        

复制代码

结果:

outloopByTryCatch==j==0
outloopByTryCatch==j==1
outloopByTryCatch==j==2
====>>outloopByTryCatch跳出
outloopByTryCatch======>>>END

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/402509.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java基础集合简介Map(三)下

From: https://www.cnblogs.com/douyu2580860/p/8358768.html --Map接口简介 今天来看一看map集合&#xff0c;map映射接口&#xff0c;用于存放键值对&#xff0c;<key,value>&#xff0c;通过key来查找value,顾名思义key不能为空&#xff0c;唯一且不重复&#xff0c;不…

从getmemery()函数看内存管理、函数传参等一系列问题

在C 面试题目中&#xff0c;会经常出现getmemery()函数的改错题&#xff0c;比如下面这道题&#xff0c; 例一&#xff1a;代码如下&#xff1a; [cpp] view plaincopy #include <stdio.h> char *getmemery() { char p[] "hello world!"; …

Java中array、List、Set互相转换

From: https://www.cnblogs.com/yysbolg/p/9977365.html 数组转List String[] staffs new String[]{"A", "B", "C"}; List staffsList Arrays.asList(staffs);//注意: Arrays.asList() 返回一个受指定数组决定的固定大小的列表。所以不能做 a…

Apache Shiro 使用手册(三)Shiro 授权

授权即访问控制&#xff0c;它将判断用户在应用程序中对资源是否拥有相应的访问权限。 如&#xff0c;判断一个用户有查看页面的权限&#xff0c;编辑数据的权限&#xff0c;拥有某一按钮的权限&#xff0c;以及是否拥有打印的权限等等。 一、授权的三要素授权有着三个核心元素…

UVa 10026 - Shoemaker's Problem

题目大意&#xff1a;鞋匠有n个任务&#xff0c;第i个任务要花费ti天&#xff0c;同时第i个任务每耽误一天要有fi的罚金。求完成所有任务的最小罚金。 虽然知道是贪心&#xff0c;可是并不确定如何作贪心选择&#xff0c;只好“取经”了...假如有两个任务i和j&#xff0c;先做i…

在VS2012中实现Ext JS的智能提示太简单了

Visual Studio 2012太强大了&#xff0c;居然能自己会去提取Ext JS的类的属性和方法&#xff0c;从而实现只能提示。下面就来介绍一下实现这个功能。在Visual Studio 2012中随便创建一个Web项目&#xff0c;我创建了一个空的Web项目&#xff0c;目录结构如下图所示&#xff1a;…

mybatis 查询之神坑

先看一个示例&#xff1a; 数据表数据&#xff1a; mybatis类和查询语句&#xff1a; 1. 当UserInfoMap中所有字段(包含association)都为NULL的话&#xff0c;getUserInfo的返回结果是个null&#xff0c;即使查询的记录存在&#xff01;运行结果如下&#xff1a; 2019-06-26 …

微软万圣节文件

为什么80%的码农都做不了架构师&#xff1f;>>> http://www.aka.org.cn/Docs/halloween/halloweenDoc.html 微软万圣节文件 圣节文件在微软以外被用作称呼一系列来源可靠的备忘录&#xff0c;内容是微软总部用来对付开源软件&#xff08;特别是Linux&#xff09;的…

linux C 学习 简单字符串逆序输出

看了下网上的字符串逆序输出&#xff0c;都相对复杂&#xff0c;下面给一个简单的字符串逆序输出小程序实现: [cpp] view plaincopy #include <stdio.h> #include <stdlib.h> #include <string.h> int main() { int i; int n; …

【干货分享】流程DEMO-补打卡

流程名&#xff1a; 补打卡申请 业务描述&#xff1a; 当员工在该出勤的工作日出勤但漏打卡时&#xff0c;于一周内填写补打卡申请。 流程相关文件&#xff1a; 流程包.xml 流程说明&#xff1a; 直接导入流程包文件&#xff0c;即可使用本流程 表单&#xff1a; 流程&#xf…

2019年最流行的10个前端框架

From: http://blog.sina.com.cn/s/blog_18337e9c40102yt1x.html &#xfeff;2019年最流行的10个前端框架 从去年下半年开始&#xff0c;互联网行业慢慢进入寒冬&#xff0c;一些设计师也不得不重新找工作。关于求职这个事情&#xff0c;UI黑客之前写过一篇文章《面试了50多位…

Linux C 中断言assert()使用简介

assert()是一个调试程序时经常使用的宏&#xff0c;在程序运行时它计算括号内的表达式&#xff0c;如果表达式为FALSE (0), 程序将报告错误&#xff0c;并终止执行。如果表达式不为0&#xff0c;则继续执行后面的语句&#xff0c;它的作用是终止程序以免导致严重后果&#xff0…

SQL中group by的用法

group by即按照给定字段对结果集进行分组&#xff0c;从字面意义上理解就是根据“by”指定的规则对数据进行分组&#xff0c;所谓的分组就是将一个“数据集”划分成若干个“小区域”&#xff0c;然后针对若干个“小区域”进行数据处理。 group by的写法&#xff1a; 1.select 字…

Linux C 数据结构---链表(单向链表)

上一篇我们讲到了线性表&#xff0c;线性表就是数据元素都一一对应&#xff0c;除只有唯一的前驱&#xff0c;唯一的后继。 线性表存储结构分为顺序存储、链式存储。 顺序存储的优点&#xff1a; 顺序存储的缺点&#xff1a; 链表就是典型的链式存储&#xff0c;将线性表L &am…

前端学PHP之文件操作(认真读读)

前面的话 在程序运行时&#xff0c;程序本身和数据一般都存在内存中&#xff0c;当程序运行结束后&#xff0c;存放在内存中的数据被释放。如果需要长期保存程序运行所需的原始数据&#xff0c;或程序运行产生的结果&#xff0c;就需要把数据存储在文件或数据库。一般地&#x…

java 定时任务(三):cron表达式

From: https://www.cnblogs.com/sawyerlsy/p/7208321.html 一、完整的cron表达式由7位以空格分隔的时间元素组成&#xff0c;从左到右分别为&#xff1a;秒、分、时、日期、月份、星期几、年份。其中需要注意的有以下几点&#xff1a; 1. spring 4.x 的spring task中只支持前6种…

我为什么要立刻放弃 React 而使用 Vue?

From: https://baijiahao.baidu.com/s?id1607323518011007619&wfrspider&forpc CSDN 发布时间&#xff1a;18-07-29 19:28 现在&#xff0c;Vue.js 在 Github 上得到的星星数已经超过了 React。这个框架的流行度在不断增长&#xff0c;由于它并没有像 Facebok&#…

本地同时修改2个版本

为什么80%的码农都做不了架构师&#xff1f;>>> 昨天讨论后我又想了想&#xff0c;你主要的需求是想在本地同时修改2个版本&#xff0c;用分支也可以做到&#xff0c;方法如下 上图是库的目录结构&#xff0c;比如Codes上做了个分支b1&#xff0c;想同时在本地编辑…

Linux C 内存管理

提到C语言&#xff0c;我们知道C语言和其他高级语言的最大的区别就是C语言是要操作内存的&#xff01; 我们需要知道——变量&#xff0c;其实是内存地址的一个抽像名字罢了。在静态编译的程序中&#xff0c;所有的变量名都会在编译时被转成内存地址。机器是不知道我们取的名字…