将变量i
的声明放在第三行,使循环变成无限循环。
public class Puzzel3 {
public static void main(String[] args) {
// Line 3
while (i == i + 1) {
System.out.println(i);
}
System.out.println("done");
}
}
数学表明,无限大 + 1 == 无限大,因此
// The declaration required
double i = Double.POSITIVE_INFINITY;
// It's infinite loop now...
while (i == i + 1) {
System.out.println(i);
}
System.out.println("done");
-无穷大 + 1 == - 无穷大
:D - Maroundouble i=1/0.0;
double
可以表示无穷大,而int
不行。如果你执行int i = 1 / 0;
,会抛出异常。 - Maroun因此,问题是对于哪些类型的哪些值,表达式 i == i + 1 为真。
Java具有以下类型:
+
运算符,除了字符串可以通过连接"1"来变长,因此不能保持相同。+
float
,m <2 ^ 24。因此,如果c> = 2 ^ 25或c <=-(2 ^ 25),则e> 1double
,m <2 ^ 53。因此,如果c> = 2 ^ 54或c <=-(2 ^ 54),则e> 1
1e100 + 1 == 1e100
。 - Caramiriel