黑马程序员技术交流社区

标题: 容易出错的一道题 [打印本页]

作者: 王雷    时间: 2012-9-25 23:45
标题: 容易出错的一道题
  1.                       int i = 0, j = 5;
  2.                 tp: for (;;)
  3.                 {
  4.                         i++;
  5.                         for(;;)
  6.                         {
  7.                                 if(i > j--)
  8.                                         break tp;
  9.                         }
  10.                 }
  11.                 System.out.println("i = " + i + ", j = "+ j);
复制代码

作者: 黑马杨晨    时间: 2012-9-25 23:49
这题咋做啊{:soso_e144:}
作者: 王玉岩    时间: 2012-9-25 23:56
                      int i = 0, j = 5;
                tp: for (;;)  //这个for循环应该是表示条件一直成立
                {
                        i++;
                        for(;;)
                        {
                                if(i > j--)
                                        break tp;
                        }
                }
                System.out.println("i = " + i + ", j = "+ j);

但是运行的结果好像跟想像中的不一样 求解
作者: 陈郊    时间: 2012-9-26 00:16
首先外层循环是一个死循环,进入循环之后执行i++,i=1,再进入第二层循环,第二层循环也是死循环,进入之后会当i=1,j=0时,满足if的条件,执行break tp即结束最外层循环,此时i=1,j=-1,最后的结果就是:i=1,j=-1
作者: hello_world!    时间: 2012-9-26 00:41
楼上的正解,结果是:i=1,j=-1
作者: 宫明星    时间: 2012-9-26 03:16
本帖最后由 宫明星 于 2012-9-26 03:22 编辑
  1. int i = 0, j = 5;
  2.   tp: for (;;)        //这个意思是循环始终是真,无限循环
  3. {
  4.         i++;
  5.   for(;;)        //同上
  6. {
  7. if(i > j--)
  8.   break tp;//如果条件满足,跳出循环,注意,是跳出tp循环
  9. }
  10. }
  11. System.out.println("i = " + i + ", j = "+ j);
复制代码
循环执行第一遍时候,i++,进入内循环,此时,i的值是1
然后判断i > j--j这时是5,不成立,然后执行j--,因为内循环始终成立,返回再判断i > j--。
反复循环判断,一直到j等于0的时候,i > j成立,跳出循环,此时判断完之后执行j--,j的值是-1
所以最后打印的值应该是 i=1,j=-1

需要注意的环节我用红字标出来了。

作者: 王雷    时间: 2012-9-26 08:47
问题已解决




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