/**
* @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;
茗茗
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,
添加回答
举报
0/150
提交
取消