黑马程序员技术交流社区
标题:
continue 标签问题。
[打印本页]
作者:
樊玲
时间:
2013-3-10 10:35
标题:
continue 标签问题。
class XunDemo
{
public static void main(String[] args)
{
first:for(int i=0;i<3;i++){
System.out.print("0");
second:for(int j=0;j<5;j++){
System.out.print("1");
if(j==3){
continue first; // 回到first 标签处,继续循环,
}
}
}
}
}
当我给外循环写上标签first的时候,当执行if(j==3)时continue。。。。最后结果不应该是011011011吗?
可是这个结果是:011110111101111
求解,
作者:
刘松老师
时间:
2013-3-10 10:43
因为j是从0开始,0-3是四次,所以会输出4个1
作者:
黑马_位志国
时间:
2013-3-10 10:52
本帖最后由 黑马_位志国 于 2013-3-10 10:55 编辑
当执行到if(j == 3)时,外循环先打印出0,然后,j从0到5共执行四次,打印出1111。此时,又跳到外循环,继续循环。
i从0到3共执行三次,所以内循环j从0到5被执行过三次,综上所述,外循环每执行完一次就打印出01111,总共执行三次,即所运行结果为011110111101111
作者:
沈文杰
时间:
2013-3-10 11:06
本帖最后由 沈文杰 于 2013-3-10 11:09 编辑
<blockquote>/*
复制代码
作者:
沈文杰
时间:
2013-3-10 11:11
本帖最后由 沈文杰 于 2013-3-10 11:18 编辑
/*
first (1)Print second (2)Print Allprint if
第一圈: i = 0 0 j = 0 1 01 false
第一圈: j = 1 1 011 false
第一圈: j = 2 1 0111 false
第一圈: j = 3 1 01111 true
第二圈: i = 1 0 j = 0 1 0111101 false
第二圈: j = 1 1 01111011 false
第二圈: j = 2 1 011110111 false
第二圈: j = 3 1 0111101111 true
第三圈: i = 2 0 j = 0 1 011110111101 false
第三圈: j = 1 1 0111101111011 false
第三圈: j = 2 1 01111011110111 false
第三圈: j = 3 1 011110111101111 true
循环结束
*/
复制代码
作者:
沈文杰
时间:
2013-3-10 11:15
http://bbs.itheima.com/forum.php?mod=attachment&aid=MTMzNzB8NTA5ZTcyY2RjOGJlZDIxOTU0ODY1NDcwNGEzNzAyYjZ8MTc2MTI0NDk0Nw%3D%3D&request=yes&_f=.jpg
Print.JPG
(38.72 KB, 下载次数: 47)
下载附件
2013-3-10 11:15 上传
作者:
梁胜海
时间:
2013-3-10 11:18
之所以是打印三个1,是因为你把输出语句写在了if(j=3)的前面,判断之前还要打印一次。估计你是忽略了打印语句在判断前面少算了一个1。
作者:
HM张勇
时间:
2013-3-10 11:31
本帖最后由 HM张勇 于 2013-3-10 11:43 编辑
你看这段代码的执行顺序:
second:for(int j=0;j<5;j++)
{
System.out.print("1");
if(j==3)
{
continue first; // 回到first 标签处,继续循环,
}
}
内循环:
先打印"1",再判断。
这里是问题的关键。
语句是这样执行的:
j=0 打印"1"
j=1 打印"1"
j=2 打印"1"
j=3 打印"1"
当 j==3时,跳到first的循环。所以第一次循环打印结果:01111。楼主对continue的理解没有错,问题出现在语句的执行顺序上。
如果代码这样写,
if(j==3)
{
continue first; // 回到first 标签处,继续循环,
}
System.out.print("1");
内循环:
先判断,
打印"1"
。
语句是这样执行的:
判断 j==3是否成立,如果成立就跳到first的循环,不成立往下执行。
j=0 打印"1"
j=1 打印"1"
j=2 打印"1"
打印结果就是0111,你再想想。
作者:
黑马17期-闫东东
时间:
2013-3-10 14:06
rst:for(int i=0;i<3;i++){
System.out.print("0");
second:for(int j=0;j<5;j++){
System.out.print("1");
if(j==3){
continue first; // 回到first 标签处,继续循环,
}
}
外层循环: i: 0-2 3次
i=0时 j 0-3(因为continue,j=3,到first循环,)打印3次111,
以此类推 i=1: j:0-3 j=3,到first循环,)打印3次111
i=2: j:0-3 j=3,到first循环,)打印3次111
所以结果是:011101110111
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2