In this lesson, you will learn about the while() and do…while() iteration statements. These statements operate in much the same way that for() statements operate. The main difference is that a for() statement is best used when there are a particular number of iterations needed through a code block, whereas while() and do…while() are best used when a single expression needs to be evaluated and continuing the loop so long as it evaluates as true.
Here is the basic syntax for constructing a while() loop (you can insert any expression that evaluates to a boolean value):
Meanwhile, a do…while() loop operates in the same way, except that it’s inverted. In other words, it first executes the code block (at least once), and continues to execute so long as the evaluation holds true:
It will not be immediately apparent why do…while() is ever needed. Although it is not as commonly used as the while() loop, it is very useful when a block of code has to execute at least once, but possibly several more times.
As with the for() loop code snippet, you can quickly set up a while(), or do…while() template. Just type in “while” or “do”, respectively, and then hit the tab key twice.
Let’s begin the lesson by setting up an ASP.NET project called “CS-ASP_026” with a single resultLabel Control:
In Default.aspx.cs write some preliminary code for the Page_Load() method that sets the scene for a text-based adventure “game” between a hero and a monster:
Now, let’s write our “battle” logic that allows each side to duke it out, repeatedly, until one of the opponents reaches zero health. Here, each opponent deals a random amount of damage (between 1 and 10 for the hero, and between 1 and 20 for the monster):
Now, you will want to report the actual damage done for each round (try both, ++round and round++ to see the difference between the two):
The String.Format() method might look a bit strange here ,but remember you can use whatever whitespace you want in order to make the code more readable.
When you run the application, you will see the result of this epic battle. However, you will probably notice that most of the time the hero gets in a single shot – from the initial “bonus” attack - and wins without triggering the main battle logic in the while() loop. This is because the monster’s battle logic is included in the while() loop, and because it executes only when both combatants have more than zero health, the monster will often be left unable to retaliate. What we will want to do instead is have both combatants engage each other at least once so that the monster gets at least a single shot in. All we need to implement this is simply invert the while() loop so that its code block executes first, creating a do…while() loop, instead:
Now, we see that the monster gets in at least one attack every time, even if he’s at below zero health. This is because the do... while will always run the code block at least once, then it will evaluate whether the condition is true, and if the loop should continue:
As usual, you can learn a lot about the flow of execution in your code by setting a break-point and watching the magic happen in Debug mode. Try doing this for both while() and do…while() loops to see the difference between how they execute.
Lesson 27 - Looping with the while() & do...while() Iteration Statements