Een lus onderbreken

All lectures for NL purposes
Niveau 1 , Les 526
Beschikbaar

"Hallo Amigo!

"Hoi Elly."

"Je hebt loops al bestudeerd, en dat is cool."

"Ik ben het ermee eens! Nu weet ik totaal niet hoe ik zonder hen moet leven."

"Soms kun je het zonder doen... Maar vaker zul je ze nodig hebben. Vandaag gaan we het hebben over de situatie waarin je eerder uit de lus moet komen dan gepland."

"Bedoel je, wanneer de voorwaarde om de lus voort te zetten waar is, maar je de lus nog steeds moet verlaten?"

"Precies! Soms klinkt het alsof je al een programmeur bent. Hoe dan ook, om eerder dan gepland uit een lus te komen, kun je de instructie break gebruiken . Kijk eens naar het volgende voorbeeld:

Code Uitleg
Scanner console = new Scanner(System.in);
boolean isExit = false;
while (!isExit)
{
   String s = console.nextLine();
   isExit = s.equals("exit");
}
Het programma leest een regel van het toetsenbord totdat u invoert "exit".

"Ik snap het. Het programma leest regels van de console. Als je invoert "exit", wordt de isExitvariabele , wordt truede lusvoorwaarde en eindigt de lus."!isExitfalse

"Dat klopt. Java heeft dus een speciale breakinstructie waarmee je dergelijke logica kunt vereenvoudigen. Als een breakinstructie binnen een lus wordt uitgevoerd, eindigt de lus onmiddellijk. Het programma begint met het uitvoeren van de instructie die volgt op de lus. De instructie is erg kort :

break;

"Hier is hoe je de breakverklaring kunt gebruiken om het voorbeeld dat we zojuist hebben besproken te herschrijven:

Code Uitleg
Scanner console = new Scanner(System.in);
while (true)
{
   String s = console.nextLine();
   if (s.equals("exit"))
     break;
}
Het programma leest een regel van het toetsenbord totdat u invoert "exit".

'Misschien zal ik dat onthouden. Ik heb het gevoel dat het van pas zal komen.'

"Maar breakhet is niet de enige Java-instructie waarmee je het gedrag van een lus kunt regelen. Java heeft ook de continueinstructie. Als je een continueinstructie binnen een lus uitvoert, eindigt de huidige iteratie van de lus eerder dan gepland."

"Wat bedoel je met iteratie?"

"Een lus-iteratie is één uitvoering van de lusbody. De continueinstructie onderbreekt de huidige iteratie van de lus, maar in tegenstelling tot de breakinstructie beëindigt het de lus zelf niet. De instructie is ook kort:

continue;

"Dus de continueinstructie kan in een lus worden gebruikt als we de uitvoering van bepaalde iteraties van de lus willen 'overslaan'?"

"Precies. Begrijp je het verschil tussen breaken continue? Als je een zeven moet vinden uit 20 niet-herhalende cijfers, wat voor soort lus en lusonderbreking zou je dan gebruiken?

"Hmm... ik zou alle getallen doornemen, en als ik 7 vind, dan zou ik een uitvoeren break."

1"Wat als u getallen van tot moet weergeven, 20behalve getallen die deelbaar zijn door 7?"

"Nou, hier heb ik waarschijnlijk nodig continue, aangezien ik de lus niet wil verlaten. Maar ik begrijp het nog steeds niet helemaal."

"Laat me je laten zien hoe je dit probleem kunt oplossen. Zo zou deze code eruit kunnen zien."

Code Uitleg
int i = 1;
while (i <= 20)
{
   if ( (i % 7) == 0 )
     continue;
   System.out.println(i);
   i++;
}
Het programma toont getallen van 1tot 20. Als het getal deelbaar is door 7(de rest deling door 7is 0 ), dan slaan we de weergave van het getal over.

'Waarom kijk je me zo achterdochtig aan, Ellie? Zit hier een addertje onder het gras?'

"Je laat je niet voor de gek houden, Amigo! Inderdaad, deze code zal niet correct werken . Hij zal de eerste 6 cijfers weergeven, en izal dan voor altijd op het nummer blijven hangen 7. De verklaring slaat immers continuetwee andere verklaringen over: System.out.println(i)en i++. Als een resultaat, zodra we de waarde bereiken , stopt 7de variabele met veranderen en zitten we in een oneindige lus. Ik heb de code met opzet op deze manier geschreven om een ​​veel voorkomende fout te illustreren."i

"Hoe lossen we het op?"

"Er zijn hier twee opties:"

Optie 1: wijzigen ivoor uitvoeren continue, maar daarnai % 7

Optie 2: altijd verhogen iaan het begin van de lus. Maar dan imoet de startwaarde zijn 0.

Optie 1 Optie 2
int i = 1;
while (i <= 20)
{
   if ( (i % 7) == 0 )
   {
     i++;
     continue;
   }
   
   System.out.println(i);
   i++;
}
int i = 0;
while (i < 20)
{
   i++;
   if ( (i % 7) == 0)
     continue;
   System.out.println(i);
}

"Uitstekend! Ik zal proberen deze fout niet te maken."

"Ik zal je belofte onthouden!"

Opmerkingen
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION