Infinite Loop Puzzles in Java
Last Updated :
25 Sep, 2017
Problem 1 : Insert code in the given code segments to make the loop infinite.
class GFG
{
public static void main(String s[]){
for ( int i = start; i <= start + 1 ; i++) {
}
}
}
|
Solution:
It looks as though it should run for only two iterations, but it can be made to loop indefinitely by taking advantage of the overflow behavior.
Integer.MAX_VALUE is the maximum value that an int can store in Java. When i gets to Integer.MAX_VALUE and is incremented, it silently wraps around to Integer.MIN_VALUE. So, we can declare variable start with 1 less than maximum value.
Following is the solution:
class GFG
{
public static void main(String s[]){
int start = Integer.MAX_VALUE- 1 ;
for ( int i = start; i <= start + 1 ; i++) {
}
}
}
|
In this, start=2147483645 (Integer.MAX_VALUE-1), and the value goes like 2147483645, 2147483646, -2147483648, -2147483647…….. and so on.
Problem 2 Insert code in the given code segments to make the loop infinite.
class GFG
{
public static void main(String s[]) {
while (i <= j && j <= i && i != j) {
}
}
}
|
Solution:
Until release 5.0, Java’s numerical comparison operators (=) required both of their operands to be of a primitive numeric type (byte, char, short, int, long, float, or double). In release 5.0, the specification was changed to say that the type of each operand must be convertible to a primitive numeric type. Therein lies the rub.
In release 5.0, autoboxing and auto-unboxing were added to the language. We are using this in the following :
class GFG
{
public static void main(String s[]){
Integer i = new Integer( 0 );
Integer j = new Integer( 0 );
while (i <= j && j <= i && i != j) {
}
}
}
|
The first two subexpressions (i <= j and j <= i) perform unboxing conversions on i and j and compare the resulting int values numerically. Both i and j represent 0, so both of these subexpressions evaluate to true. The third subexpression (i != j) performs an identity comparison on the object references i and j. The two variables refer to distinct objects, as each was initialized to a new Integer instance. Therefore, the third subexpression also evaluates to true, and the loop spins forever.
Like Article
Suggest improvement
Share your thoughts in the comments
Please Login to comment...