[英]How to make loop infinite with “x <= y && x >= y && x != y”?
几年前我有这个面试问题,但我还没有找到答案。
什么应该是x和y来进行无限循环?
while (x <= y&& x >= y && x != y) {
}
我们尝试使用Nan
, infinity+/-
, null
float
vs int
。
您需要两个可比较的变量,具有相同的值,但代表不同的实例,例如:
Integer x = new Integer(0);
Integer y = new Integer(0);
x <= y
和y <= x
都为真,因为Integer
是未装箱的,但实例等式x == y
为假。
请注意,它也适用于Float
, Long
和Double
,并且任何值(不仅仅是0)都有效。
您还可以使用JVM的复杂性 - 它们通常只缓存最多127个整数,所以这也可以工作:
Integer x = 128;
Integer y = 128;
(但它不会与127)。
或者更简单,因为Double
s通常根本没有缓存:
Double x = 0d;
Double y = 0d;
你必须创建两个整数对象,例如:
Integer x = new Integer(2);
Integer y = new Integer(2);
因为x
和y
是对象而没有序数类型,所以你得到一个无限循环。
你得到了答案,我只想说我是如何达到同一个答案的。 在正常的世界中,这样的测试将毫无用处,因此两个数字无法像这样工作。 所以这意味着它必须是一些特定的java。
x和y可以是简单的类型 - 这使得它立刻变得不可能。
x和y可以是对象。 但是哪些对象与<=或> =进行比较? 只有'盒装'号码。 因此答案非常快。
这里是。
Integer x =1;
Integer y = new Integer(1);
while(x <= y&& x >= y && x != y) {
System.out.println("Success");
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.