A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 樊玲 中级黑马   /  2013-3-10 10:35  /  1997 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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
求解,

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1 鼓励鼓励

查看全部评分

10 个回复

倒序浏览
因为j是从0开始,0-3是四次,所以会输出4个1
回复 使用道具 举报
本帖最后由 黑马_位志国 于 2013-3-10 10:55 编辑

当执行到if(j == 3)时,外循环先打印出0,然后,j从0到5共执行四次,打印出1111。此时,又跳到外循环,继续循环。
i从0到3共执行三次,所以内循环j从0到5被执行过三次,综上所述,外循环每执行完一次就打印出01111,总共执行三次,即所运行结果为011110111101111

评分

参与人数 1黑马币 +6 收起 理由
黄玉昆 + 6 赞一个!

查看全部评分

回复 使用道具 举报
0-->3执行了四次所以1输出了四次。加油啊。
回复 使用道具 举报
本帖最后由 沈文杰 于 2013-3-10 11:09 编辑
  1. <blockquote>/*
复制代码
回复 使用道具 举报
本帖最后由 沈文杰 于 2013-3-10 11:18 编辑
  1. /*
  2.                   first               (1)Print           second     (2)Print           Allprint                                          if

  3. 第一圈:        i = 0                0                  j = 0                 1                        01                                      false
  4. 第一圈:                                                   j = 1                 1                        011                                    false
  5. 第一圈:                                                   j = 2                 1                        0111                                  false
  6. 第一圈:                                                   j = 3                 1                        01111                                true
  7.                                                                                  
  8. 第二圈:        i = 1                0                  j = 0                 1                        0111101                            false
  9. 第二圈:                                                   j = 1                 1                        01111011                          false
  10. 第二圈:                                                   j = 2                 1                        011110111                        false
  11. 第二圈:                                                   j = 3                 1                        0111101111                      true

  12. 第三圈:        i = 2                0                  j = 0                 1                        011110111101                  false
  13. 第三圈:                                                   j = 1                 1                        0111101111011                false
  14. 第三圈:                                                   j = 2                 1                        01111011110111              false
  15. 第三圈:                                                   j = 3                 1                        011110111101111            true
  16.                                                  循环结束
  17. */
复制代码
回复 使用道具 举报
http://bbs.itheima.com/forum.php?mod=attachment&aid=MTMzNzB8NjdiNGVkMzI2N2U5ZWJmZWY4OTg5YmNhMDA0Mjc4OWN8MTczNTE3NDEyMw%3D%3D&request=yes&_f=.jpg

Print.JPG (38.72 KB, 下载次数: 36)

Print.JPG

评分

参与人数 1黑马币 +6 收起 理由
黄玉昆 + 6 神人那

查看全部评分

回复 使用道具 举报
之所以是打印三个1,是因为你把输出语句写在了if(j=3)的前面,判断之前还要打印一次。估计你是忽略了打印语句在判断前面少算了一个1。
回复 使用道具 举报
本帖最后由 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,你再想想。





















评分

参与人数 1黑马币 +6 收起 理由
黄玉昆 + 6 赞一个!

查看全部评分

回复 使用道具 举报
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
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马