Java while循环打印平方数字不能使用int?

时间:2017-11-17 15:49:50

标签: java types do-while

在Java中,创建一个从2开始的do-while循环,并在数字小于1,000,000时显示每行的平方数。这就是我所拥有的:

int k = 2;
do {
    System.out.println(k);
    k *= k;
} while(k < 1000000);

问题是输出,不知何故它被卡在0并无限循环到0以打印出来?我不相信这是因为数字超出了int范围,因为32位数的范围大约是+/- 20亿......但是当我切换数据类型时k很长,一切正常......这是为什么?

3 个答案:

答案 0 :(得分:5)

这真的是由于int。以这种方式产生的序列是

2
4
16
256
65536
0

然后它仍为零。请注意,它永远不会超过1000000。

使用long时,65536之后的数字将为4294967296(不适合int,但确实适合long),因此会停止。

这在十六进制中可能更明显,然后序列读取(具有足够长的整数)

2
4
0x10
0x100
0x10000
0x100000000

int只能保留最低的8位十六进制数字,因此0x100000000变为0。

答案 1 :(得分:0)

如果您正在寻找2的幂,则需要将k*=k替换为k+=1并将print(k)替换为print(k*k)。使用基数2的指数增长远远快于二次方,这导致超出范围。

答案 2 :(得分:0)

您打印方块的代码应为

int k = 2;
do {
    System.out.println(k*k);
    k++;
}while(k < 1000000);

当您将结果存储在同一个变量中时,您的输出会呈指数级增长