为了账号安全,请及时绑定邮箱和手机立即绑定

关于这是一个死循环的解释?

关于这是一个死循环的解释?

大Lemon 2016-01-12 20:03:56
/**  * @ClassName: FindEvenNumber  * @Description: 判断最小值和最大值之间的偶数  * @author: YuHong  * @date: 2014年1月24日 上午10:14:53  */ public class FindEvenNumber  { public static void main(String[] args)  { for(int i=Integer.MIN_VALUE;i<=Integer.MAX_VALUE;++i) //错误之处这是一个死循环 { boolean isEven=(i%2==0); System.out.println(String.format("i = %d, isEven=%b", i, isEven)); } } }这是书上一道习题,要找出错误的地方,答案是这个循环是死循环。 但是没搞懂。。。
查看完整描述

3 回答

已采纳
?
Its_forever

TA贡献361条经验 获得超328个赞

//写了一段代码测试了一哈。
public class Test1 {
	public static void main(String[] args) {
		System.out.println("整数的最小值:" + Integer.MIN_VALUE);
		System.out.println("整数的最大值:" + Integer.MAX_VALUE);
		System.out.println("Integer.MAX_VALUE+1:" + (Integer.MAX_VALUE + 1));
	}
}

输出结果:

整数的最小值:-2147483648
整数的最大值:2147483647
Integer.MAX_VALUE+1:-2147483648

所以,按照你的代码的循环体: for(int i=Integer.MIN_VALUE;i<=Integer.MAX_VALUE;++i)

最后这个++i;

当i的值为Integer.MAX_VALUE,相当于:a=Integer.MAX_VALUE+1;i=a;(先运算再赋值)

所以值又就变成了:-2147483648。

所以是一个死循环了。

可以把循环体里面加一段代码:

if(i == Integer.MAX_VALUE)
   break;


查看完整回答
1 反对 回复 2016-01-12
  • 爱与恨
    爱与恨
    这个(Integer.MAX_VALUE+1=-2147483648)我服了,原来还有这样的事
?
乔帮主

TA贡献184条经验 获得超67个赞

Integer.MIN_VALUE,Integer.MAX_VALUE这两个表示设么?

查看完整回答
反对 回复 2016-01-13
?
茗茗

TA贡献1条经验 获得超0个赞

I nteger.MAX_VALUE为 2的31次方减一 2 147 483 647 ,Integer.MIN_VALUE为 负2的31次方为 2 147 483 648Integer.max_value = 01111111 111111111111111111111111+1 = 10000000 00000000 00000000 00000000最高位是符号位为1,这个数是负数,负数的源码是补码取反+1,刚好等于Integer.min_value,

查看完整回答
反对 回复 2016-01-12
  • 3 回答
  • 0 关注
  • 2462 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信