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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李海鹏 中级黑马   /  2013-1-15 20:05  /  1627 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 李海鹏 于 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上面写上输出语句,结果就不一样,??),结果为什么是这个呢?求详解

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

5 个回复

倒序浏览
本帖最后由 毛喆 于 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么?

评分

参与人数 1黑马币 +3 收起 理由
冯海霞 + 3 神马都是浮云

查看全部评分

回复 使用道具 举报
毛喆 发表于 2013-1-15 20:16
外层: i = 1, j = 5
内层: i = 1, j = 5
内层: i = 1, j = 4

不明白,在break tp上面写上输出语句,结果就不一样
回复 使用道具 举报
在最后一次判断的时候i=1,j=0。你是使用i>j--进行判断,这时候1>0,j会接着自减(和for循环不一样,不是执行后再进行自减)。然后满足跳出的条件直接break出最外层循环,开始输出值。

评分

参与人数 1黑马币 +3 收起 理由
冯海霞 + 3

查看全部评分

回复 使用道具 举报
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-16 12:33

评分

参与人数 1黑马币 +3 收起 理由
李海鹏 + 3 赞一个!

查看全部评分

回复 使用道具 举报
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;
}

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马