我写了这个循环,继续对一个数字进行平方,直到它超过1000000.
while(n<1000000){
n=n*n;
System.out.println(n);
count++;
}
然而,当我输入2时,它将正确地执行前4个方格,然后无限输出零。我不知道为什么我是编程的新手并希望得到一些帮助。
答案 0 :(得分:1)
int的最大值是2147483647. 65536 * 65536的结果将溢出为0.之后,您只会永远地乘以0 * 0。
查看Java spec以了解有关基本类型的可能值的更多信息:
<强> 4.2.1。积分类型和值
整数类型的值是以下范围内的整数:
- 对于字节,从-128到127,包括
- 简而言之,从-32768到32767,包括
- 对于int,从-2147483648到2147483647,包括
- 长期,从-9223372036854775808到9223372036854775807,包括在内
- 对于char,从'\ u0000'到'\ uffff'(含),即从0到65535
编辑:正如安德烈亚斯在评论中所描述的那样,如果你长时间使用它会起作用。
答案 1 :(得分:0)
这是由于整数溢出造成的。
因为你正在做n = n * n,所以它是前一个数字的平方。 例如,如果n = 2开始, 循环1: n = 2 * 2 = 4; 循环2: n = 4 * 4 = 8; 循环3: n = 8 * 8 = 64; ... 循环k: n = 2 ^ k * 2 ^ k = 2 ^ 2k
它将在几次迭代后溢出整数的存储容量2147483647。
经过4次迭代后,您将进行计算 2 ^ 32这是4294967296。 这会导致n被赋值为0,因为在java中,整数溢出是通过赋值为0来处理的。 在此之后它仍为0并且无限期地继续,因为它从未满足终止条件。