Verschachtelte Schleifen
Bisher hat jedes print seine Zeile beendet. Um mehrere Dinge nebeneinander in eine Zeile zu schreiben, hat Lua io.write. Es schreibt seine Werte so, wie sie sind: ohne neue Zeile am Ende und ohne Tabulatoren dazwischen:
io.write("Eier: ", 12)
io.write(" und Milch")
print()
print("Eier:", 12)Eier: 12 und Milch
Eier: 12Ein leeres print() gibt nur eine neue Zeile aus: Hier beendet es die Zeile, die io.write begonnen hat. Zwei weitere Unterschiede: io.write schreibt eine Dezimalzahl wie 5.0 als 5 (print gibt 5.0 aus), und es nimmt nur Texte und Zahlen. Für alles andere nimm zuerst tostring:
io.write(true)main.lua:1: bad argument #1 to 'write' (string expected, got boolean)Nun zu den Schleifen. Eine Schleife kann eine andere Schleife enthalten. Das nennt man eine verschachtelte Schleife: In jedem Durchlauf der äußeren Schleife läuft die innere Schleife ganz durch. Emmas Sonnenblumenfeld hat 3 Reihen mit je 5 Sonnenblumen:
for reihe = 1, 3 do
for spalte = 1, 5 do
io.write("*")
end
print()
end*****
*****
*****Die äußere Schleife beginnt mit der Reihe 1, und die innere Schleife schreibt fünf Sterne nebeneinander. Nach der inneren Schleife beendet print() die Reihe. Erst dann geht die äußere Schleife zur Reihe 2, und die innere Schleife schreibt wieder fünf Sterne. Der innere Block läuft 3 × 5 = 15-mal. Gib den Variablen der beiden Schleifen verschiedene Namen (hier reihe und spalte), damit du weißt, welche welche ist.
Sieh dir an, wo das print() steht: nach dem end der inneren Schleife, aber noch in der äußeren Schleife. In der inneren Schleife würde es jeden Stern in eine eigene Zeile setzen. Nach der äußeren Schleife würden alle 15 Sterne in einer langen Zeile stehen.
Die innere Schleife kann die Variable der äußeren benutzen. Mit spalte = 1, reihe bekommt die erste Reihe einen Stern, die zweite zwei und so weiter:
for reihe = 1, 4 do
for spalte = 1, reihe do
io.write("*")
end
print()
end*
**
***
****Statt io.write kannst du jede Reihe auch als Text aufbauen: Beginne mit einem leeren Text "", hänge in der inneren Schleife mit .. etwas an und gib ihn nach der inneren Schleife aus. Es ist dasselbe Muster wie beim Addieren, nur mit Text:
for reihe = 1, 2 do
local zeile = ""
for spalte = 1, 3 do
zeile = zeile .. "*"
end
print(zeile)
end***
***Noch etwas: Ein break in der inneren Schleife beendet nur die innere Schleife. Die äußere Schleife macht mit ihrem nächsten Durchlauf weiter.
So schreibst du es:
Anweisungen
- 1
Zeichne Emmas Feld: 4 Reihen mit je 6 Sonnenblumen
*. Benutze zwei verschachteltefor-Schleifen, eine äußere mit der Variablenreiheund eine innere mit der Variablenspalte. Die innere Schleife schreibt mitio.writeein*. Danach, noch in der äußeren Schleife, beendetprint()die Reihe.****** ****** ****** ****** - 2
Nummeriere unter dem Feld Emmas Beete: 3 Reihen mit je 4 Beeten, von 1 bis 12 nummeriert, Reihe für Reihe. Erzeuge vor den Schleifen eine lokale Variable
beetmit dem Wert0. Erhöhe sie in der inneren Schleife um 1 und schreibe sie mitio.write(beet, " "). Beende jede Reihe mitprint(). Die Nummern sehen so aus:1 2 3 4 5 6 7 8 9 10 11 12Jede Reihe endet mit einem Leerzeichen nach der letzten Zahl. Du siehst es nicht, und es macht nichts.