黑马程序员技术交流社区

标题: break用了标号实现跳出循环的功能疑问 [打印本页]

作者: yogaa    时间: 2014-4-20 18:25
标题: break用了标号实现跳出循环的功能疑问
public class Shut{
        public static void main(String[] args){
                int i=0;
                int j=0;
                A1:
                while(true) {
                  i=i+1;
                  A2:
                  while(j<100) {
                     j=j+1;
                     if(j==50)
                        break A2;
                     
                  
                }
                System.out.println(j);
                }
        }
}
输出的j怎么能是100,而不是50呢?不是在A2处中断了吗?
作者: 忘川    时间: 2014-4-20 19:47
本帖最后由 忘川 于 2014-4-20 19:53 编辑

  1. public class Shut{
  2.         public static void main(String[] args){
  3.                 int i=0;
  4.                 int j=0;
  5.                 A1:
  6.                 while(true) {//这个位置,while(true)是while无限循环啊
  7.                   i=i+1;
  8.                   A2:
  9.                   while(j<100) {
  10.                      j=j+1;
  11.                      if(j==50)
  12. /*
  13. 第一次到达这个位置的时候,跳出到A2标号了,往下执行,然后输出50
  14. 但是你只是跳出A2而不是跳出A1,你还在while(true)这个循环里,进入下一次循环了,又走到了while(j<100这里)
  15. 这时候j的值已经是50了,在进行if(j==50)这个判断之前,j先执行了j+1操作,所以if(j==50)时,j的值是51,不会再执行到break了,而是
  16. 一直循环直到j=100的时候跳出while(j<100)循环,这时候输出自然是100
  17. */                              
  18.                      break A2;
  19.             
  20.                   
  21.                 }
  22.                 System.out.println(j);
  23.                 }
复制代码

作者: 忘川    时间: 2014-4-20 19:51
咦....不知道为嘛我插入代码论坛自动给我插入了<p></p>标签,你看的时候把<p>忽略掉看好了
作者: yogaa    时间: 2014-4-20 19:57
忘川 发表于 2014-4-20 19:51
咦....不知道为嘛我插入代码论坛自动给我插入了标签,你看的时候把忽略掉看好了 ...

原来是A1那里又进行循环了啊,我又测试了一下,把A1那里的循环除掉了,运行结果就是50了,呵呵,谢谢啊~你的回答对我很有帮助~:lol
作者: AntThinking_toT    时间: 2014-4-20 19:59
当j==50时,跳向A2结点;然后又执行while循环,此时j<100成立,于是又进入循环,j=j+1得到51,而j==50不成立,不会再次跳向A2而是不断循环直到j==100,跳出while(j<100)循环;所以此时输出100,由于外层循环是while(true),所以不断输出100。总之,楼主疑惑的地方是没有明白跳到A2后,又会执行while(j<100),而不是什么也不执行。
作者: 忘川    时间: 2014-4-20 20:01
yogaa 发表于 2014-4-20 19:57
原来是A1那里又进行循环了啊,我又测试了一下,把A1那里的循环除掉了,运行结果就是50了,呵呵,谢谢啊~ ...

:lol有帮助就好 大家一起加油吧




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2