Competentie: Ik kan een index-gebaseerde loop gebruiken en bepalen wanneer ik welke loop-soort het beste kan gebruiken.
Specifieke leerdoelen:
for-loop
gebruiken om een sectie code een vooraf bepaald aantal keren uit te voeren, aangestuurd door een vastgestart, conditie, en stap.for-loop
en een while-loop
met dezelfde voorwaarden equivalent werken.for-loop
gebruiken om door een ArrayList te navigeren van begin tot eind op indexbasis, waarbij ArrayList.get(i) wordt gebruikt om individuele elementen te benaderen.enhanced for-loop
en een index-gebaseerde for-loop
bij het werken met arrays, waarbij de enhanced for-loop
loopt op basis van waarde terwijl de index for-loop
meer controle biedt voor complexe array manipulaties.while-loops
het best gebruikt worden wanneer het aantal benodigde iteraties onzeker is voordat de loop wordt betreden.De opdrachten staan in de verschillende submodulen.
Een index-gebaseerde for-loop gebruik je om een bepaald aantal keer een stuk code uit te voeren. Je gebruikt het vaak als je precies weet hoe vaak iets uitgevoerd moet worden.
De lus ziet er als volgt uit:
for(start; condition; step){
//Code
}
Een voorbeeld:
for(int i = 0; i < 10; i++) {
//Code
}
Elke for-loop is altijd om te schrijven naar een while-loop. Onderstaande while-loop is inhoudelijk aan de bovengenoemde for-loop.
int i=0;
while(i<10){
//Code
i++;
}
De for-loop wordt veel gebruikt omdat het “handiger” is om op deze manier een lus te maken. Dankzij de syntax van de for-loop staat namelijk de teller initialisatie, de conditie en de ophoging van de teller in 1 regel in plaats van dat het door je code verspreid staat. Dit maakt het eenvoudiger om te lezen en kan je op 1 plek alle informatie vinden die je nodig hebt om de lus te snappen.
Om door een ArrayList heen te kunnen lopen (te itereren) met een index (teller), moet je weten hoeveel elementen er in het array staan. Wanneer we bijv. een ArrayList van String’s genaamd arrLst hebben, dan kunnen we dit als volgt doen:
for(int i = 0; i < arrLst.size(); i++) {
String item = arrLst.get(i);
SaxionApp.printLine(item);
}
Enhanced for Loop
Je kunt ook door iedere item van een ArrayList (of array’s, die later nog worden behandeld) lopen door gebruik te maken van de enhanced for-loop, die je al eerder hebt gezien. Het voorgaande voorbeeld ziet er met de enhanced for-loop dan als volgt uit:
for (String item: arrLst) {
SaxionApp.printLine(item);
}
Dit doet dus precies hetzelfde, maar is wel een stuk korter en duidelijker. Wanneer je dus de index (de loop variabele i in het vorige code voorbeeld) dus niet nodig hebt, heeft deze enhanced for-loop dan ook de voorkeur.
Enhanced for loop - For Each vs. Index for loop
Enhanced for-loops itereren over alle waarden in een lijst. Dit is vrijwel altijd de meeste eenvoudige manier om door een lijst heen te lopen. Echter, zodra je iets moet verplaatsen kan dit niet: je hebt immers geen toegang tot de index (plaats) van een item in de lijst. Hier heb je echt de index gebaseerde for-loop voor nodig.
De index-gebaseerde for-loop wordt ook vaak gebruikt om code een X aantal keer te herhalen, waarbij je X kent. Het gaat hier dus om “10 keer iets herhalen” (of 11, 50, 100, etc.). Als je niet precies zeker bent over hoe vaak iets herhaald moet worden (bijv. omdat dit afhangt van gebruikersinvoer), kies dan voor een while-loop.
While loops
Een while loop kan in principe hetzelfde als een index-based for-loop, maar wordt meestal alleen gebruikt voor loops waarbij het exacte aantal onbekend is (bijv. door gebruikersinvoer). Probeer maar eens een lus te verzinnen die wacht “totdat de gebruiker quit
invoert”. Dit kan er ongeveer uit zien als:
String someUserInput = SaxionApp.readString();
while(!someUserInput.equals("quit")) {
// do something
someUserInput = SaxionApp.readString();
}
Als je dezelfde lus met een for-loop zou willen schrijven, dan krijg je:
for(String someUserInput = SaxionApp.readString(); !readString.equals("quit"); someUserInput = SaxionApp.readString()) {
// do Something
}
Alhoewel het weldegelijk mogelijk is, wordt het for-loop voorbeeld al snel gezien als “onleesbaar” en “onhandig”. Wij leren jullie dus aan een while-loop te gebruiken in dit soort situaties.