Java's While and Do-While Loops in Five Minutes

Photo by Claire Satera

Indrek Ots
by Indrek Ots
4 min read

Categories

  • articles

Tags

  • java
  • basics
  • loop

This article was originally published on SitePoint on April 26, 2017. For more interesting content about Java, check out SitePoint’s Java channel.

A while loop is a control flow statement that allows us to run a piece of code multiple times. Like loops in general, a while loop can be used to repeat an action as long as a condition is met. The structure of Java’s while loop is very similar to a conditional statement in the sense that they both check a boolean expression and maybe execute some code.

To be able to follow along, this article expects that you understand variables and arrays in Java. It would also be good if you had some experience with conditional expressions.

While Loop

The while loop is the most basic loop construct in Java. It consists of the while keyword, the loop condition, and the loop body.

while (condition) {
    // loop body
}

A single run-through of the loop body is referred to as an iteration. Before each iteration, the loop condition is evaluated and, just like with if statements, the body is executed only if the loop condition evaluates to true. In fact, a while loop body is repeated as long as the loop condition stays true - you can think of them as if statements where the body of the statement can be repeated.

Usually some execution of the loop will change something that makes the condition evaluate to false and thus the loop ends. A loop with a condition that never becomes false runs infinitely and is commonly referred to as an infinite loop.

Example

int num = 0;
while (num < 10) {
    System.out.println(num);
    num++;
}

This example prints out numbers from 0 to 9. If this seems foreign to you, don’t worry. We’ll go through it step by step.

We first initialize a variable num to equal 0. This will be our loop counter. When the program encounters a while statement, its condition will be evaluated. In our case 0 < 10 evaluates to true and the loop body is executed. Inside the loop body, the num variable is printed out and then incremented by one. Here is where the first iteration ends.

After the first run-through of the loop body, the loop condition is going to be evaluated for the second time. 1 < 10 still evaluates to true and the next iteration can commence. As you can imagine, the same process will be repeated several more times.

The final iteration begins when num is equal to 9. Our loop counter is printed out the last time and is incremented to equal 10. This time, however, a new iteration cannot begin because the loop condition evaluates to false. 10 is not smaller than 10.

As you can see, the loop ran as long as the loop condition held true. Armed with this knowledge, you can create while loops that are a bit more complex, but on the other hand, more useful as well. Let’s iterate over an array.

String[] names = {"Doc", "Dopey", "Bashful", "Grumpy", "Sneezy", "Sleepy", "Happy"};
int index = 0;
while (index < names.length) {
    System.out.println(names[index]);
    index++;
}

The general concept of this example is the same as in the previous one. We initialize a loop counter and iterate over an array until all elements in the array have been printed out. As a matter of fact, iterating over arrays (or Collections for that matter) is a very common use case and Java provides a loop construct which is better suited for that - the for loop.

Do-While Loop

A do-while loop is very similar to a while loop but there is one significant difference: Unlike with a while loop, the condition is checked at the end of each iteration. This means that a do-while loop is always executed at least once.

do {
    // loop body
}
while (condition);

Example

A do-while loop first executes the loop body and then evaluates the loop condition. Based on the result of the evaluation, the loop either terminates or a new iteration is started. To illustrate this idea, let’s have a look at a simple guess my name game.

Scanner scanner = new Scanner(System.in);
String guess;
do {
    System.out.print("Guess my name: ");
    guess = scanner.nextLine();
}
while (!"Daffy Duck".equals(guess));
System.out.println("Congratulations, you guessed my name correctly!");

The example uses a Scanner to parse input from System.in. This is the standard input stream which in most cases corresponds to keyboard input. To put it simply, we’re going to read text typed by the player.

In a guessing game we would like to prompt the player for an answer at least once and do it until the player guesses the correct answer. A do-while loop fits perfectly here. In the loop body we receive input from the player and then the loop condition checks whether it is the correct answer or not. The loop must run as long as the guess does not equal Daffy Duck. If a correct answer is received, the loop terminates and we congratulate the player.

Summary

Loops allow you to repeat a block of code multiple times. This article covered the while and do-while loops in Java. They’re relatively similar in that both check a condition and execute the loop body if it evaluated to true but they have one major difference: A while loop’s condition is checked before each iteration - the loop condition for do-while, however, is checked at the end of each iteration. This means that a do-while loop is always executed at least once.

In addition while and do-while, Java provides other loop constructs that were not covered in this article. And if you’re interested enough, you can have a look at recursion. Sometimes it’s possible to use a recursive function instead of loops.