Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to make loop infinite with "x <= y && x >= y && x != y"?

Tags:

I had this interview question some years ago but I haven't found the answer yet.

What should be x and y to make a infinite loop?

while (x <= y&& x >= y && x != y) {  } 

We tried with Nan,infinity+/-,null

float vs int.

like image 812
bitli Avatar asked Apr 12 '13 11:04

bitli


2 Answers

You need two variables which are comparable, have the same value, but represent different instances, for example:

Integer x = new Integer(0); Integer y = new Integer(0); 

x <= y and y <= x are both true because the Integer are unboxed, however the instance equality x == y is false.

Note that it works with Float, Long and Double too, and any value (not just 0) works.


You can also play with the intricacies of your JVM - they generally cache integer up to 127 only, so this would work too:

Integer x = 128; Integer y = 128; 

(but it would not with 127).

Or more simply, since Doubles are generally not cached at all:

Double x = 0d; Double y = 0d; 
like image 156
assylias Avatar answered Nov 17 '22 01:11

assylias


you have to create two Integer Objects, for example:

Integer x = new Integer(2); Integer y = new Integer(2); 

Because x and y are Objects and no ordinal types, you get an infinite loop.

like image 40
Obl Tobl Avatar answered Nov 17 '22 00:11

Obl Tobl