黑马程序员技术交流社区

标题: 一个关于循环控制的问题 [打印本页]

作者: 韩伟    时间: 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