黑马程序员技术交流社区
标题:
求结果,小程序
[打印本页]
作者:
李海鹏
时间:
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