黑马程序员技术交流社区

标题: 求结果,小程序 [打印本页]

作者: 李海鹏    时间: 2013-1-15 20:05
标题: 求结果,小程序
本帖最后由 李海鹏 于 2013-1-16 12:34 编辑

public class Demo
{
public static void main(String []args)
{
  int i = 0, j = 5;
  tp: for (;;)
  {
   i++;
   for(;;)
   {
    if(i > j--)
     break tp;
   }
  }
  System.out.println("i = " + i + ", j = "+ j);
}
}   

i = 1, j = -1(不明白,在break tp上面写上输出语句,结果就不一样,??),结果为什么是这个呢?求详解

作者: 毛喆    时间: 2013-1-15 20:16
本帖最后由 毛喆 于 2013-1-15 20:24 编辑

外层: i = 1, j = 5
内层: i = 1, j = 5
内层: i = 1, j = 4
内层: i = 1, j = 3
内层: i = 1, j = 2
内层: i = 1, j = 1
内层: i = 1, j = 0
最终结果: i = 1, j = -1


也就是说J再最终输出的时候又自减了一次
这算bug么?

作者: 李海鹏    时间: 2013-1-15 20:30
毛喆 发表于 2013-1-15 20:16
外层: i = 1, j = 5
内层: i = 1, j = 5
内层: i = 1, j = 4

不明白,在break tp上面写上输出语句,结果就不一样
作者: 冷延冰    时间: 2013-1-15 20:55
在最后一次判断的时候i=1,j=0。你是使用i>j--进行判断,这时候1>0,j会接着自减(和for循环不一样,不是执行后再进行自减)。然后满足跳出的条件直接break出最外层循环,开始输出值。

作者: 刘志雄    时间: 2013-1-15 22:24
j--,是先使用j的值,再将j减去1
看看最后关键的过程
当i = 1; j = 1;
比较,条件不成立
i = 1; j = 0;
再比较,条件成立,但比较的同时,j又自减了一次
最后结果就为i = 1; j = -1
你说的在break tp上面写上输出语句,结果就不一样,是因为你可能是这样这样写的
if(i > j--)
     System.out.println("i = " + i + ", j = "+ j);
     break tp;
忘了加大括号,比较一次程序就退出了,应为
if(i > j--)
{
     System.out.println("i = " + i + ", j = "+ j);
     break tp;
}
作者: 刘志雄    时间: 2013-1-15 22:24
j--,是先使用j的值,再将j减去1
看看最后关键的过程
当i = 1; j = 1;
比较,条件不成立
i = 1; j = 0;
再比较,条件成立,但比较的同时,j又自减了一次
最后结果就为i = 1; j = -1
你说的在break tp上面写上输出语句,结果就不一样,是因为你可能是这样这样写的
if(i > j--)
     System.out.println("i = " + i + ", j = "+ j);
     break tp;
忘了加大括号,比较一次程序就退出了,应为
if(i > j--)
{
     System.out.println("i = " + i + ", j = "+ j);
     break tp;
}




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