请问关于continue和break的问题。

2018-08-25 05:20:19
	int ii=0;
outer:
for(;true;) {
inner:
for(;ii<10;ii++) {
System.out.println("ii = "+ii);
if(ii==2) {
//当ii的值为2的时候,在打印continue之后,程序就跳到外面
//然后继续执行下去。
System.out.println("Continue:"+"\n此时的ii的值为:"+ii);
continue inner;
}
if(ii==3) {
System.out.println("Break:"+"\n此时的ii的值为:"+ii);
break inner;
}
if(ii==7) {
System.out.println("Continue:outer"+"\n此时的ii的值为:"+ii);
continue outer;
}
if(ii==8) {
System.out.println("Break"+"\n此时的ii的值为:"+ii);
break outer;
}
for(int k=0;k<5;k++) {
if(k==3) {
System.out.println("continue inner"+"\n此时的ii的值为:"+ii);
continue inner;
}

如上代码,为什么ii=2的时候,continue后 ,ii的值为增加1变成3。而在ii=3后,执行break后。ii的值就会一直为3。理论上,ii++这段代码应该都在continue和break之后,无论哪种情况,它都不会继续增加啊。
...全文
252 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
月亮光华 2018-08-26
  • 打赏
  • 举报
回复
程序执行到continue ii++还是会运算一次 for(;ii<3;ii++)构成一个完整的语句 执行到break for(;ii<3;)ii++就不再执行了 停下来

Nautron_ 2018-08-26
  • 打赏
  • 举报
回复
首先你应该知道ii++是先进行数据处理,再进行自增,
你可以这样理解
当你使用continue的时候:
内循环是直接跳过中间的代码执行到最后,然后对遍历的下一个数进行处理,也就是说你正确的执行完了这段代码,ii已经完成了数据处理,那么ii++会被执行。
当你使用break的时候:
表示你想让内循环立即结束,而后返回外循环。但是外循环你写的是一个死循环,那么他就会重新回到内循环,但这时候,他已经是一个新的内循环了。这个时候ii++并没有数据被处理,他将先进行数据处理,也就是先保持3的值继续走到break,然后以此类推变成一个死循环。
沐码 2018-08-26
  • 打赏
  • 举报
回复
执行continue inner后会结束本次循环,跳转到inner标签,因为ii==2循环结束了,所以ii++,变为3。
ii成为3后,会终结内层循环,并跳转到inner标签处执行代码,因为是直接终结内层循环,故ii会继续保留3的值。但是外层循环为
 for(;true;) {。。。。}
,故外层会一直执行下去,所以变成了死循环。
int ii=0; 
for(;true;) {
inner:{
if(ii>0)
System.out.print(ii);//此处ii会为3,验证了ii会继续保留3的值
for(;ii<10;ii++) {
System.out.println("ii = "+ii);

if(ii==3) {
System.out.println("Break:"+"\n此时的ii的值为:"+ii);
break inner;
}
}
}
}
Nautron_ 2018-08-26
  • 打赏
  • 举报
回复


引用 5 楼 fortheother 的回复:
[quote=引用 4 楼 qq_38182820 的回复:]
首先你应该知道ii++是先进行数据处理,再进行自增,
你可以这样理解
当你使用continue的时候:
内循环是直接跳过中间的代码执行到最后,然后对遍历的下一个数进行处理,也就是说你正确的执行完了这段代码,ii已经完成了数据处理,那么ii++会被执行。
当你使用break的时候:
表示你想让内循环立即结束,而后返回外循环。但是外循环你写的是一个死循环,那么他就会重新回到内循环,但这时候,他已经是一个新的内循环了。这个时候ii++并没有数据被处理,他将先进行数据处理,也就是先保持3的值继续走到break,然后以此类推变成一个死循环。





// 下面测试while中的情况
// for(int ii=0;ii<10;ii++)
// {print(ii); }
// 是不是应该相当于
// int ii=0;
// while(ii<10){
// print(ii);
// ii++;
// }int jj=0;
inner2:
while(jj<10) {
System.out.println("jj = " + jj);
if (jj == 2) {
// 当ii的值为2的时候,在打印continue之后,程序就跳到外面
// 然后继续执行下去。
System.out.println("Continue:" + "\n此时的jj的值为:" + jj);
continue inner2;
}
if (jj == 3) {
System.out.println("Break:" + "\n此时的jj的值为:" + jj);
// jj++;
break inner2;
}
++jj;
}

我用这段代码的时候,程序也会陷入死循环,for和while在循环处理上遇见continue的时候,处理不一致么?[/quote]

当然了。因为你的代码在jj=2的时候就永远卡在这里了啊
2018-08-26
  • 打赏
  • 举报
回复
引用 4 楼 qq_38182820 的回复:
首先你应该知道ii++是先进行数据处理,再进行自增,
你可以这样理解
当你使用continue的时候:
内循环是直接跳过中间的代码执行到最后,然后对遍历的下一个数进行处理,也就是说你正确的执行完了这段代码,ii已经完成了数据处理,那么ii++会被执行。
当你使用break的时候:
表示你想让内循环立即结束,而后返回外循环。但是外循环你写的是一个死循环,那么他就会重新回到内循环,但这时候,他已经是一个新的内循环了。这个时候ii++并没有数据被处理,他将先进行数据处理,也就是先保持3的值继续走到break,然后以此类推变成一个死循环。





// 下面测试while中的情况
// for(int ii=0;ii<10;ii++)
// {print(ii); }
// 是不是应该相当于
// int ii=0;
// while(ii<10){
// print(ii);
// ii++;
// }int jj=0;
inner2:
while(jj<10) {
System.out.println("jj = " + jj);
if (jj == 2) {
// 当ii的值为2的时候,在打印continue之后,程序就跳到外面
// 然后继续执行下去。
System.out.println("Continue:" + "\n此时的jj的值为:" + jj);
continue inner2;
}
if (jj == 3) {
System.out.println("Break:" + "\n此时的jj的值为:" + jj);
// jj++;
break inner2;
}
++jj;
}

我用这段代码的时候,程序也会陷入死循环,for和while在循环处理上遇见continue的时候,处理不一致么?
店小不二 2018-08-25
  • 打赏
  • 举报
回复
当ii=3的时候,break会使得并不会执行ii++这条语句。所以ii一直为3,一直处于一个死循环。

62,616

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧