首页 > 编程知识 正文

java中break和continue的作用,java break和continue return

时间:2023-05-04 10:49:14 阅读:249564 作者:4312

前言

在开发中,对于终止程序执行的操作是很重要的。

特别是在大量的判断的条件下。

在终止当前语句执行的关键字有break、continue和return。

正确的使用他们可以让你的程序在执行和判断上会更加的优雅

到底什么时候用哪个呢?

下面我们简单说明下break、continue、return三者的区别和联系。

先上个简单的例子来说明下。

研发背景(示例)

现在假如我们有一个商品参数数组列表,假设每行数据的格式如下

"产地:法国","编号:42342345","法国进口","1855列级庄","其它,巧克力香型,果香型,烘烤香型","干型","葡萄酒赤霞珠(Cabernet Sauvignon),梅洛(Merlot)",酸度中酸","新/旧世界旧世界","口感饱满","颜色宝石红","甜度干型"

并且每行的数据内容都不尽相同。

然后根据业务的需要,我们需要剔除部分数据,然后组成新的一列。

例如需要剔除包含“产地”,“编号”,“香型”,"厂家",“厂址”这些数据。

示例代码 continue //伪代码String[] keyArr = keys.split("_");String[] outKeyArr = {"名称","厂","毛重","容量","醒酒时间","规格","联系方式","编号","包装","保质期","品牌","系列","分级","新/旧世界"};StringBuffer sbKey= new StringBuffer();//判断当前包含的话,就不放到sbKey中。for(String key:keyArr ){ for(String outkey:outKeyArr) { if(key.contains(outkey)) { // TODO //判断当前包含则跳出,重新进行二次判断 continue; } } sbKey.append(key);}

在这个地方,大家会发现,如果使用continue,则会一直在for(String outkey:outKeyArr)里面打转转,而且一直返回不出来。如果数据比较大,会很影响性能。

而且,还不能解决当前的这个需求?

你继续debug执行代码会发现,outKeyArr的数组无法清除,还是会继续写入到sbKey中。进入到sbKey.append(key)这行代码中。

你感觉自己就像玩了个寂寞...

为什么?

因为如果把continue放到for(String outkey:outKeyArr)里面,它的作用域就只有在for(String outkey:outKeyArr)里面。它不能影响for(String key:keyArr )的执行次数。

return

那用return可以解决么?

//伪代码String[] keyArr = keys.split("_");String[] outKeyArr = {"名称","厂","毛重","容量","醒酒时间","规格","联系方式","编号","包装","保质期","品牌","系列","分级","新/旧世界"};StringBuffer sbKey= new StringBuffer();//判断当前包含的话,就不放到sbKey中。for(String key:keyArr ){ for(String outkey:outKeyArr) { if(key.contains(outkey)) { // TODO //判断当前包含则跳出,重新进行二次判断 return; } } sbKey.append(key);}

执行这段代码,你会发现,只要触发了return。当前方法就over了。根本就到达不了sbKey.append(key)这行代码。

因为return的作用域是无视代码块,直接跳出了当前函数,直接进入到调用这个函数的里面去了。

break

break是否能解决呢?

String[] outKeyArr= {"名称","厂","毛重","容量","醒酒时间","规格","联系方式","编号","包装","保质期","品牌","系列","分级","新/旧世界"}; String[] keyArr = {"产地:法国","编号:42342345","法国进口","1855列级庄","其它,巧克力香型,果香型,烘烤香型","干型","葡萄酒赤霞珠(Cabernet Sauvignon),梅洛(Merlot)","酸度中酸","新/旧世界旧世界","口感饱满","颜色宝石红","甜度干型"}; StringBuilder sbKey= new StringBuilder(); for(String key:keyArr) { for (String outKey: outKeyArr) { if (key.contains(outKey)) { break; } } sbKey.append(key); } System.out.println(sbKey.toString());

最后发现还是玩了个寂寞,还是把所有的都输出来了。

小结 为什么都失败了?

其实,break实现了从for (String outKey: outKeyArr)中跳出的逻辑,但是我们for有两层,所以,在判断的时候需要分别对两个for进行判断。

for的逻辑操作(所有的逻辑操作都是如此),必须先计算内部的,再计算外部的。

break已经把内部的解决了,现在的外部问题就需要去用新的角度去思考,即屏蔽内部代码的角度去看外部的。

我们发现,外部  for(String key:keyArr)只要满足内部的for (String outKey: outKeyArr),就需要跳出本次循环,继续进行下次循环。

跳出本次循环,继续进行下次循环那就用continue。

但是什么时候执行continue呢?

这里我们可以设置一个位置变量,默认是不执行continue的。当内部的for (String outKey: outKeyArr)的if (key.contains(outKey))为true时,则说明当前key是不能放进去的,则需要摒弃到sbKey之外。

代码实现

String[] keyAr = {"名称","厂","毛重","容量","醒酒时间","规格","联系方式","编号","包装","保质期","品牌","系列","分级","新/旧世界"};String[] keyArr = {"产地:法国","编号:42342345","法国进口","1855列级庄","其它,巧克力香型,果香型,烘烤香型","干型","葡萄酒赤霞珠(Cabernet Sauvignon),梅洛(Merlot)","酸度中酸","新/旧世界旧世界","口感饱满","颜色宝石红","甜度干型"};StringBuilder sbKey= new StringBuilder();for(String key:keyArr) { boolean flag = false; for (String d : keyAr) { if (key.contains(d)) { flag = true; break; } } if(flag) continue; sbKey.append(key);}System.out.println(sbKey.toString());

就在中间设置一个flag。然后组合continue和break。就可以解决了这个问题了。

总结:三者的区别列表 breakcontinuereturn作用范围结束当前层循环。不能结束循环结束当前函数循环差异1、只能跳出一层循环,如果你的循环是嵌套循环,那么你需要按照你嵌套的层次,逐步使用break来跳出。
2、break在循环体内,强行结束循环的执行,也就是结束整个循环过程,不在判断执行循环的条件是否成立,直接转向循环语句下面的语句。1、终止本次循环的执行,即跳过当前这次循环中continue语句后尚未执行的语句,接着进行下一次循环条件的判断。
2、终止当前的循环过程,但并不跳出循环,而是继续往下判断循环条件执行语句.他只能结束循环中的一次过程,但不能终止循环继续进行.1、return 从当前的方法中退出,返回到该调用的方法的语句处,继续执行。
2、return 返回一个值给调用该方法的语句,返回值的数据类型必须与方法的声明中的返回值的类型一致。当然,不返回值也是可以的。示例for(a){break;}
int val=0;
break的作用语句就是跳出当前for(a),直接进入到int val =0;for(int i;i<a;i++)
{continue;}
int val=0;
continue的作用语句就是跳出当前for(a=1),直接进入到for(a=2);

for(int i;i<a;i++)
{return;}
int val=0;
return就是直接跳出了当前函数。

如果你有更好的实现方式,你也可以在留言中说明。

win7电脑文件夹如何加密

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。