黑马程序员技术交流社区
标题: 一个关于循环控制的问题 [打印本页]
作者: 韩伟 时间: 2012-7-12 08:37
标题: 一个关于循环控制的问题
本帖最后由 韩伟 于 2012-7-13 12:32 编辑
在看书时发现了这样一段代码,有点儿不太理解,谁给讲解一下
ok:
for(inti=0;i<10;i++)
{
for(intj=0;j<10;j++)
{
System.out.println(“i=”+ i + “,j=” + j);
if(j== 5) break ok;
}
}
这里的break也可以这样用吗,这不是传说中的goto语句吗,而且break ok是什么意思,是结束ok 还是跳转到ok呢
作者: 曹恒业 时间: 2012-7-12 08:44
ok:
for(inti=0;i<10;i++)
{
for(intj=0;j<10;j++)
{
System.out.println(“i=”+ i + “,j=” + j);
if(j== 5) break ok;
}
}
这里的break也可以这样用吗,这不是传说中的goto语句吗,而且break ok是什么意思,是结束ok 还是跳转到ok呢
===============================================
首先,LZ要明白,Java中goto仍然是一个保留的keyword,但不允许使用。
这里的break ok;的意思是跳转到外循环ok处再继续执行代码。
但是这里的跳转标示ok,仅适用于break和continue关键字,所以可以说和C++中的goto在功能上有类似之处,但是也有使用的局限性。
希望有帮到你~~
作者: 包晗 时间: 2012-7-12 08:45
break ok
先说 break 是跳出循环
ok 就是你的标识
ok:
for(inti=0;i<10;i++)
{
for(intj=0;j<10;j++)
{
System.out.println(“i=”+ i + “,j=” + j);
if(j== 5) break ok;
}
}
你的for循环前有个ok:
你把ok: 换成w: 或者其他的什么( xxx: )
都一样
这里 break ok
就是跳出 OK 循环
作者: 王双宝 时间: 2012-7-12 08:45
break ok表示终于外层的for循环。不是跳转到ok处。
作者: 刘俊佳 时间: 2012-7-12 08:48
在Java中,要想跳出多重循环,可以在外面的循环语句前定义一个标号,然后在里层循环体的
代码中使用带有标号的break语句,即可跳出外层循环。这里的标号就是ok.当j等于5时,就跳出外层循环。
作者: 曹魁 时间: 2012-7-12 08:51
本帖最后由 曹魁 于 2012-7-14 08:42 编辑
ok:
for(inti=0;i<10;i++)
{
for(intj=0;j<10;j++)
{
System.out.println(“i=”+ i + “,j=” + j);
if(j== 5) break ok;
}
}
此处的Ok只是一个for的标志,通俗的说,也就是给for循环起了一个名字而已,
等程序运行到if(j==5)的时候,整个程序直接跳出for循环,再继续下面的程序运行。
测试了一下,其运行结果为:
---------- java ----------
i=0,j=1
i=0,j=2
i=0,j=3
i=0,j=4
i=0,j=5
作者: 陈冲 时间: 2012-7-12 09:07
你可以把ok当做外循环的名字,break ok;就是执行该语句后跳出外循环。
loop1:for(inti=0;i<10;i++)
{
loop2:for(intj=0;j<10;j++)
{
System.out.println(“i=”+ i + “,j=” + j);
if(j== 5) break loop1;//如这里如果使用break loop1;就是跳出外循环,而使用break loop2;就是跳出内循环
}
}
作者: 张天天 时间: 2012-7-12 10:43
这应该属于带标号的break语句了吧
前面有个ok的标号,当break ok时程序直接跳转到ok处再执行程序(直接跳出两层循环)
类似于c中的goto语句
为什么在程序中很少见到有这样的程序呢?因为如果程序写成这样
靠标记来控制程序的流程,说明你的程序写的已经非常的烂了
整个解决问题的思路已经严重错误,你的程序可以重写了。。。
作者: 王宝康 时间: 2012-7-12 12:02
程序设计中可以通过多层循环嵌套解决一些复杂问题,当涉及到从内层循环跳到外层循环时,如何使用过C或C++的开发人员可以想到使用goto语句,像楼主的代码
ok:
for(inti=0;i<10;i++)
{
for(intj=0;j<10;j++)
{
System.out.println(“i=”+ i + “,j=” + j);
if(j== 5) goto ok;
}
}
意为,当j自增到5时,程序就会跳出内循环到标记ok出继续执行,java中也有goto关键字,不过该关键字是java保留的,使用时java编译器会抛出异常
java中使用break来达到相同的效果,楼主代码中的break ok为跳出内循环到外循环的OK出继续执行程序代码。
作者: prospect 时间: 2012-7-12 12:25
首先goto语句在Java语言中是一个保留字。Java允许在语句前加上标签前缀,构成标签(label)语句。如:
Outer:
{
......
}
带标号的break和continue语句,只能在标签所指的语句块或其嵌套包含的内层语句块中使用。表示从语句块内部退出到指定语句块中。楼主给的情况就是这种了。break到ok处,继续执行与ok同等级的程序代码。
作者: 京鱼龙 时间: 2012-7-12 13:08
本帖最后由 罗京雨 于 2012-7-14 09:00 编辑
我的原先分析错了,假如运算正确应该是break ok直接跳出外循环的,因为是在外循环标注ok的,下面的就不需要再循环了。
作者: 朱东方 时间: 2012-7-13 06:50
曹魁 发表于 2012-7-12 08:51
ok:
for(inti=0;i
哥们,你真测试了吗。你这结果都错了
作者: 朱东方 时间: 2012-7-13 06:59
本帖最后由 朱东方 于 2012-7-13 07:01 编辑
ok:
for(inti=0;i<10;i++)
{
for(intj=0;j<10;j++)
{
System.out.println(“i=”+ i + “,j=” + j);
if(j== 5) break ok; //当j等于5的时候,执行break ok;这句的意思是:直接跳出标号为ok的这个循环。跳出ok的意思就是不执行标号为ok的这个循环了,
//也就是第一个for循环。当然这样也就无法执行第二个for循环了。
//也就是说:当i==0;j==5;时,执行break ok;跳出for循环,执行下面的System.out.println("x="+x+"????????????????");这个语句了。
}
}
System.out.println("x="+x+"????????????????");
--------------------------------------------------------------
测试结果:
i=0,j=0
i=0,j=1
i=0,j=2
i=0,j=3
i=0,j=4
i=0,j=5
作者: 曹魁 时间: 2012-7-14 08:41
朱东方 发表于 2012-7-13 06:50
哥们,你真测试了吗。你这结果都错了
测试了!结果粘贴错了!不好意思啊!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |