Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| programmierung:kontrollstrukturen:loops [2024/09/22 16:08] – swe | programmierung:kontrollstrukturen:loops [2025/12/20 14:53] (current) – external edit 127.0.0.1 | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | ~~REVEAL~~ | + | # Schleifen / Loops |
| - | ====== Schleifen / Loops ====== | + | Schleifen sind grundlegende Kontrollstrukturen in der |
| - | ----> | + | Programmierung, |
| - | Schleifen sind grundlegende Kontrollstrukturen in der Programmierung, | + | |
| - | * einen Codeblock **wiederholt** auszuführen, | + | |
| - | * solange eine bestimmte **Bedingung** erfüllt ist. | + | |
| - | Sie sind besonders nützlich, um repetitive Aufgaben zu automatisieren und den Code effizienter und kompakter zu gestalten. | + | - einen Codeblock **wiederholt** auszuführen, |
| + | - solange eine bestimmte **Bedingung** erfüllt ist. | ||
| - | ----> | + | Sie sind besonders nützlich, um repetitive Aufgaben zu automatisieren |
| - | Es gibt verschiedene Arten von Schleifen, die in fast jeder Programmiersprache vorkommen: | + | und den Code effizienter und kompakter zu gestalten. |
| - | ----> | + | |
| - | * **for-Schleife**: | + | Es gibt verschiedene Arten von Schleifen, die in fast jeder |
| - | | + | Programmiersprache vorkommen: |
| - | ----> | + | - **for-Schleife**: |
| - | * **while-Schleife**: | + | |
| - | | + | Wiederholungen bekannt ist |
| - | * Sie endet, wenn eine bestimmte Bedingung nicht mehr wahr ist. | + | |
| - | ----> | + | |
| - | * **do-while-Schleife**: | + | |
| - | * Sie ähnelt der **while-Schleife** - nur mit dem Unterschied, | + | |
| - | * Du wirst sehen, auch dieses Verhalten ist immer wieder gefragt beim Programmieren. | + | |
| - | ---->> | + | |
| - | ===== for-Schleife ===== | + | |
| - | ----> | + | |
| - | ==== Struktogramm ==== | + | |
| - | {{ : | + | |
| - | Hier das Symbol für ein Struktogramm: | ||
| - | ----> | ||
| - | {{ : | ||
| - | Der Schenkel des L läuft so lange, wie es innerhalb der for-Schleife | + | - **while-Schleife**: |
| - | ----> | + | - Sie wird verwendet, wenn die Anzahl der Wiederholungen nicht bekannt |
| + | ist. | ||
| + | - Sie endet, wenn eine bestimmte Bedingung nicht mehr wahr ist. | ||
| - | Eine '' | + | |
| - | Sie ermöglicht es, eine Anweisung oder einen Block von Anweisungen wiederholt auszuführen, | + | - **do-while-Schleife**: |
| - | Die Syntax einer '' | + | - Sie ähnelt der **while-Schleife** - nur mit dem Unterschied, |
| - | ----> | + | sie in jedem Fall **einmal** ausgeführt wird und erst anschließend |
| - | < | + | die Bedingung geprüft wird. |
| + | - Du wirst sehen, auch dieses Verhalten ist immer wieder gefragt beim | ||
| + | Programmieren. | ||
| + | |||
| + | |||
| + | ## for-Schleife | ||
| + | |||
| + | Eine `for`-Loop ist eine der grundlegendsten und am häufigsten | ||
| + | verwendeten Kontrollstrukturen in Java. | ||
| + | |||
| + | Sie ermöglicht es, eine Anweisung oder einen Block von Anweisungen | ||
| + | wiederholt auszuführen, | ||
| + | |||
| + | Die Syntax einer `for`-Loops in Java sieht folgendermaßen aus: | ||
| + | ``` java | ||
| for (Initialisierung; | for (Initialisierung; | ||
| // Codeblock, der wiederholt ausgeführt wird | // Codeblock, der wiederholt ausgeführt wird | ||
| } | } | ||
| - | </ | + | ``` |
| - | ----> | + | |
| - | < | + | Du siehst an der Farbe des Wortes, dass das `for` ein |
| - | Du siehst an der Farbe des Wortes, dass das '' | + | Java-Schlüsselwort ist. Es wird gefolgt von einem Block in runden |
| - | ----> | + | Klammern: |
| - | Es wird gefolgt von einem Block in runden Klammern: | + | |
| - | ----> | + | |
| - | * **Initialisierung**: | + | - **Initialisierung**: |
| - | ----> | + | |
| - | * **Bedingung**: | + | |
| - | ----> | + | |
| - | * **Update**: Die Zählvariable bekommt einen neuen Wert. Wie dieser berechnet wird, steht in diesem Block | + | |
| - | ----> | + | |
| + | - **Bedingung**: | ||
| + | | ||
| + | | ||
| + | | ||
| + | |||
| + | |||
| + | - **Update**: Die Zählvariable bekommt einen neuen Wert. Wie dieser | ||
| + | | ||
| Hier nun ein konkretes Beispiel: | Hier nun ein konkretes Beispiel: | ||
| - | < | + | ``` java |
| for (int i = 0; i < 10; i++) { | for (int i = 0; i < 10; i++) { | ||
| System.out.println(" | System.out.println(" | ||
| } | } | ||
| - | </ | + | ``` |
| Kannst du erkennen, was die Schleife macht? | Kannst du erkennen, was die Schleife macht? | ||
| - | - **Initialisierung**: | + | 1. |
| - | | + | `int` und weisen ihr den Startwert |
| - | | + | 2. |
| + | | ||
| + | | ||
| + | | ||
| + | 3. | ||
| + | | ||
| + | | ||
| - | ---->> | + | ### Deklaration und Initalisierung außerhalb des Schleifenkopfes |
| - | ===== while-Schleife ===== | + | Nicht immer wird die Zählvariable im Schleifenkopf deklariert. Stell dir ein Programm vor, wo die Anzahl der Schleifendurchläufe vom **Ergebnis |
| - | ----> | + | |
| - | '' | + | |
| - | ----> | + | |
| - | ==== Struktogramm ==== | + | |
| - | {{ : | + | ```java |
| + | int anzahlKinder = 3; | ||
| + | int anzahlErwachsene = 12; | ||
| + | int anzahlPersonen = anzahlKinder + anzahlErwachsene; | ||
| + | for (; anzahlPersonen < 10; anzahlPersonen++) | ||
| + | System.out.println(anzahlPersonen); | ||
| + | } | ||
| + | ``` | ||
| + | **Hier wird im Schleifenkopf ganz darauf verzichtet, eine Zählvariable zu deklarieren und initalisieren. | ||
| + | Es wird einfach die Variable `anzahlPersonen` verwendet, die außerhalb der Schleife deklariert und berechnet wurde.** | ||
| - | Das Struktogramm der '' | + | ## while-Schleife |
| - | ----> | + | |
| - | {{ : | + | |
| - | Eine '' | + | `while`-Loops sind wie bereits erwähnt, flexibler bei einer |
| + | unbekannten Zahl von Iterationen. Das kann passieren, wenn eine Menge | ||
| + | von Einträgen zu durchlaufen sind, wir aber nicht wissen, wie viele | ||
| + | genau das sein werden. | ||
| + | Anders als bei der `for`-Loop wird diesmal nähmlich keine Zählvariable deklariert und | ||
| + | initialisiert. Falls wir eine solche Variable haben wollen, müsste diese | ||
| + | von außen beigesteuert werden. | ||
| - | ----> | + | Eine `while`-Loop checkt vielmehr oftmals, ob bestimmte **Bedingungen** |
| + | noch wahr sind, ob sich beispielsweise **Zustände** geändert haben, oder | ||
| + | nicht. | ||
| - | < | + | |
| + | ``` java | ||
| Scanner scanner = new Scanner(System.in); | Scanner scanner = new Scanner(System.in); | ||
| String input = ""; | String input = ""; | ||
| Line 100: | Line 127: | ||
| scanner.close(); | scanner.close(); | ||
| - | </ | + | ``` |
| - | ----> | + | |
| - | < | + | |
| + | ``` java | ||
| int i = 0; // Initialisierung der Variablen | int i = 0; // Initialisierung der Variablen | ||
| while (i < 5) { // Bedingung prüfen | while (i < 5) { // Bedingung prüfen | ||
| Line 108: | Line 136: | ||
| i++; // Variablen aktualisieren | i++; // Variablen aktualisieren | ||
| } | } | ||
| - | </ | + | ``` |
| - | ----> | + | |
| - | ===== do-while-Schleife ===== | + | |
| + | ## do-while-Schleife | ||
| + | Die **do-while**-Schleife ist eine Kontrollstruktur in Java, die sich perfekt für Situationen eignet, in denen eine Aktion **mindestens einmal** ausgeführt werden soll, bevor eine Bedingung überprüft wird. | ||
| + | |||
| + | **Merkmale der do-while-Schleife** | ||
| + | |||
| + | - Der **Schleifenrumpf** wird immer **mindestens einmal** ausgeführt. | ||
| + | - Erst **nach der ersten Iteration** wird die Bedingung überprüft. | ||
| + | - Wenn die Bedingung **wahr (true)** bleibt, wird die Schleife erneut durchlaufen. | ||
| + | - Falls die Bedingung **falsch (false)** ist, endet die Schleife. | ||
| + | |||
| + | ### Syntax: | ||
| + | ```java | ||
| + | do { | ||
| + | // Code, der mindestens einmal ausgeführt wird | ||
| + | } while (Bedingung); | ||
| + | ``` | ||
| + | |||
| + | |||
| + | ### Beispiel Würfelspiel | ||
| + | |||
| + | Stell dir ein Würfelspiel vor. Es soll so lange gewürfelt werden, bis eine 6 gefallen ist. | ||
| + | |||
| + | Das ist der klassische Use-Case für eine `do-while`: | ||
| + | - Mindestens einmal muss eine Aktion ausgeführt werden (gewürfelt) | ||
| + | - **Danach** wird die Aktion ausgewertet (wurde eine 6 gewürfelt) | ||
| + | |||
| + | ```java | ||
| + | import java.util.Random; | ||
| + | |||
| + | public class WuerfelSpiel { | ||
| + | public static void main(String[] args) { | ||
| + | Random random = new Random(); | ||
| + | int wurf; | ||
| + | |||
| + | System.out.println(" | ||
| + | |||
| + | do { | ||
| + | wurf = random.nextInt(6) + 1; // Zufallszahl zwischen 1 und 6 | ||
| + | System.out.println(" | ||
| + | } while (wurf != 6); | ||
| + | |||
| + | System.out.println(" | ||
| + | } | ||
| + | } | ||
| + | ``` | ||