In de vorige hoofdstukken zagen we reeds enkele lussen:
for
: deze lus wordt gebruikt als het aantal iteraties op voorhand gekend is.foreach
: met deze lus werd elk element van een array aangesproken. Ook hier is het aantal iteraties gekend, het is gelijk aan het aantal elementen van de array.Soms is het aantal uit te voeren iteraties echter niet op voorhand gekend. In dit geval biedt de iteratie met while
een oplossing.
De algemene syntax van het while
statement ziet er als volgt uit:
while (voorwaarde)
{
te herhalen instructieblok;
}
Grafisch kunnen we dit met onderstaande flowchart voorstellen:
Bespreking: zolang er aan de voorwaarde voldaan is, wordt het instructieblok herhaald. De voorwaarde bevindt zich tussen ronde haken, het instructieblok tussen accolades. Bij het opbouwen van de voorwaarde, kunnen de verschillende logische en vergelijkingsoperatoren gebruikt worden, die in het hoofdstuk over operatoren besproken werden.
De functie bepaalt hoe vaak een getal deelbaar is door 2 voordat dit getal kleiner wordt dan 1.
public static int countDivided2(float number)
{
int count = 0;
while (number > 1)
{
number = number / 2;
count++;
}
return count;
}
Grafisch kunnen we dit met onderstaande flowchart voorstellen:
Bespreking:
while
(number > 1): Zolang deze voorwaarde true
als resultaat geeft, wordt de while-lus uitgevoerd. Van zodra de voorwaarde false
geeft, stopt de while-lus en wordt er naar de eerste instructie na de lus gesprongen. In dit geval is dat de return
instructie.Vermijd een oneindige lus door de voorwaarde van de while-lus in de lus te laten wijzigen.
Soms kan het handig zijn om de voorwaarde voor het beëindigen van de lus niet bij while
te vermelden, maar de lus te stoppen d.m.v. een break
binnen de lus zelf.
while (true)
{
instructions;
if (condition) break;
}
Door true
als voorwaarde bij while
te zetten, zal de lus blijven lopen. Het stoppen van de lus gebeurt in dit geval binnen de lus zelf. De instructies binnen de lus, zorgen ervoor dat de voorwaarde bij if
wijzigt. Als er aan een bepaalde voorwaarde voldaan is, wordt het instructieblok bij if
uitgevoerd. Aangezien dit een break
is, zal de while-lus stoppen.
Naast het while
statement is er ook do while
. Deze twee structuren lijken sterk op elkaar, toch is er dit belangrijk verschil: bij do while
wordt het instructieblok altijd minstens één keer uitgevoerd, terwijl bij while
de mogelijkheid bestaat dat het instructieblok niet uitgevoerd wordt.
De algemene syntax van het do while
statement verduidelijkt dit verder:
do
{
te herhalen instructieblok;
} while (voorwaarde);
Grafisch kunnen we dit met onderstaande flowchart voorstellen:
Bespreking:
do while
statement op. Vergeet deze niet!Zoals reeds vermeld in het voorgaande wordt het instructieblok bij do while
minstens één maal uitgevoerd. In het voorbeeld hieronder wordt de variabele number op een random nummer geïnitialiseerd d.m.v. een (fictieve) functie GenerateRandomNumber(). We willen echter dat de variabele number niet groter is dan 10. D.m.v. do while
wordt number steeds opnieuw geïnitialiseerd tot de variabele een waarde kleiner of gelijk aan 10 heeft. Omdat de initialisatie hier minstens 1 keer moet gebeuren, kan dit uitgewerkt worden met een do while
statement.
int number;
do
{
number = GenerateRandomNumber(); // fictieve functie
} while (number > 10);
Door de variabele number op voorhand op een foutieve waarde te initialiseren kan bovenstaand do while
statement echter ook onder de vorm van while
geschreven worden.
int number = 11; // initialisatie op een te grote waarde -> while wordt uitgevoerd
while (number > 10)
{
number = GenerateRandomNumber();
}
Een andere toepassing van het do while
statement vind je bij de controle van invoer van de gebruiker in consoleprogramma’s. Aangezien dit momenteel niet aan de orde is, wordt do while
niet verder behandeld in deze cursus.
Open het project oefening-while-1 en maak de oefeningenreeks