Die break-Anweisung
Manchmal musst du die Schleife nicht ganz durchlaufen. Wenn du etwas suchst und es findest, gibt es keinen Grund weiterzusuchen. Die Anweisung break beendet die Schleife sofort, und das Programm macht nach dem end der Schleife weiter.
Der Händler Hugo kommt jeden zweiten Tag, und es regnet jeden 3. Tag. An welchem Tag kommt Hugo zum ersten Mal im Regen? Die Schleife gibt jeden Tag aus, den sie prüft, damit du siehst, wo sie anhält:
for tag = 1, 30 do
print("Prüfe Tag " .. tag)
if tag % 2 == 0 and tag % 3 == 0 then
print("Hugo kommt am Tag " .. tag .. " im Regen")
break
end
end
print("Fertig")Prüfe Tag 1
Prüfe Tag 2
Prüfe Tag 3
Prüfe Tag 4
Prüfe Tag 5
Prüfe Tag 6
Hugo kommt am Tag 6 im Regen
FertigAm Tag 6 ist die Bedingung wahr. Das Programm gibt das Ergebnis aus, und break beendet die Schleife: Die Tage 7 bis 30 werden nie geprüft, und das Programm macht mit print("Fertig") weiter. Ohne break würde die Schleife bis zum Tag 30 laufen und auch die Tage 12, 18, 24 und 30 melden.
Du setzt break fast immer in ein if; für sich allein würde es die Schleife schon im ersten Durchlauf beenden. Es funktioniert in while-, for- und repeat-Schleifen gleich. Du wirst auch Lua-Programme mit while true do sehen: einer Schleife, deren Bedingung immer wahr ist. Sie würde nie von selbst enden, deshalb hat sie irgendwo darin ein if mit break.
Um nach der Schleife zu wissen, was du gefunden hast, speichere es in einer Variablen, die du vor der Schleife erzeugst. Wenn die Schleife nichts findet, bleibt die Variable nil, und ein if kann das erkennen. Opa Josef besucht Emma jeden 4. Tag und Hugo jeden 6. Tag. Treffen sie sich in den ersten 10 Tagen?
local treffen
for tag = 1, 10 do
if tag % 4 == 0 and tag % 6 == 0 then
treffen = tag
break
end
end
if treffen then
print("Sie treffen sich am Tag " .. treffen)
else
print("Sie treffen sich nicht")
endSie treffen sich nichtMit for tag = 1, 20 do würde das Programm Sie treffen sich am Tag 12 ausgeben.
Lua hat kein continue. In vielen Sprachen überspringt continue den Rest des aktuellen Durchlaufs und macht mit dem nächsten weiter. Lua kennt es nicht: Es hält continue für einen Variablennamen und stolpert dann über das end danach. Das Programm startet nicht einmal:
for tag = 1, 4 do
if tag == 2 then
continue
end
print("Tag " .. tag)
endmain.lua:4: syntax error near 'end'Setze stattdessen den Rest des Blocks in ein if mit der umgekehrten Bedingung:
for tag = 1, 4 do
if tag ~= 2 then
print("Tag " .. tag)
end
endTag 1
Tag 3
Tag 4(Lua hat auch goto, womit man ans Ende des Blocks springen kann, aber das brauchst du in diesem Kurs nicht. Robloxs Luau hat continue; das Standard-Lua nicht.)
So schreibst du es:
Anweisungen
- 1
Emma hat 40 Münzen und verdient jeden Tag 15 dazu, wie die Schleife zeigt. Füge in der Schleife unter der Zeile, die die Münzen ausgibt, ein
ifhinzu, dasTag 8: Emma kauft den Karren!(mit der Nummer des Tages) ausgibt, wenn sie mindestens 150 Münzen hat. Führe das Programm aus: Die Meldung erscheint an jedem Tag ab dem Tag 8, aber Emma braucht nur einen Karren. Unter den Zeilen findest du:Tag 8: 160 Münzen Tag 8: Emma kauft den Karren! - 2
Füge im Block des
ifnach der Ausgabe einbreakhinzu, sodass die Schleife an dem Tag endet, an dem Emma den Karren kauft. Die letzten zwei Zeilen der Ausgabe der Schleife sind dann:Tag 8: 160 Münzen Tag 8: Emma kauft den Karren! - 3
Schreibe unter der Schleife eine weitere Schleife für Emmas Marktstand. Er ist an den Tagen 1 bis 10 geöffnet, aber nicht an den Regentagen, das ist jeder 3. Tag. Gib für jeden offenen Tag eine Zeile aus. Lua hat kein
continue, nimm also einif. Das Ende der Ausgabe ist:Tag 1: Markt Tag 2: Markt Tag 4: Markt Tag 5: Markt Tag 7: Markt Tag 8: Markt Tag 10: Markt