猿问

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

/**

 * @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));
		}
	}
}

这是书上一道习题,要找出错误的地方,答案是这个循环是死循环。 但是没搞懂。。。

大Lemon
浏览 2463回答 3
3回答

Its_forever

//写了一段代码测试了一哈。 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;

乔帮主

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

茗茗

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,
随时随地看视频慕课网APP

相关分类

Java
我要回答