# The Infinite Loop

Level: Beginner

Focus: Loops, random numbers

### Infinite Loop Question

The code below uses a combination of an infinite loop and a break statement. The while loop's condition has been set so that it is always true. The only way out of the loop is to use a break statement to jump beyond its boundaries.

public class InfiniteLoop {

public static void main(String[] args) {

//boolean variable to determine if the loop     //should end
boolean shouldLoopEnd = false;

//generate a random number
int targetNumber = (int) (Math.random() * 10);
System.out.println ("The target number is: " + targetNumber);

//infinite loop begins...
while (true)
{
//generate a random number to try       //and match the target number
int guessNumber = (int) (Math.random() * 10);
System.out.println ("The loop guesses: " + guessNumber);

//check to see if the guess is correct
if (guessNumber == targetNumber)
{
shouldLoopEnd = true;
}

//if we've guessed correctly break loop
if (shouldLoopEnd == true)       {
System.out.println ("Woo hoo! We have a match!");
break; // break loop
}
else
{
//around the loop we go again
System.out.println ("Let's try again..");
}
}
}
}

Personally, I use the break statement as a last resort because it breaks the logical flow of a program and makes it harder to read. Can you rewrite the above code so that the program still works the same but it no longer uses the break statement?

To get the most out of this question try and figure out the answer before coming back to read the solution on the next page.

### Infinite Loop Solution

I'm not going to say there's a "right" way to rewrite the code. The key is to make the program function the same but to let the code leave the while loop logically, rather than making a sudden jump. If your code did that then well done!

Here's my version:

public class InfiniteLoopRewrite {

public static void main(String[] args) {

//boolean variable to determine if the loop     //should end
boolean shouldLoopEnd = false;

//generate a random number
int targetNumber = (int) (Math.random() * 10);
System.out.println ("The target number is: " + targetNumber);

//no longer an infinite loop..
while (shouldLoopEnd == false)
{
//generate a random number to try       //and match the target number
int guessNumber = (int) (Math.random() * 10);
System.out.println ("The loop guesses: " + guessNumber);

//check to see if the guess is correct
if (guessNumber == targetNumber) {

shouldLoopEnd = true;

}
else
{
// round the loop we go again
System.out.println ("Let's try again..");

}

}

System.out.println ("Woo hoo! We have a match!");

}

} //end class