Ungeeigneter Schleifentyp: Unterschied zwischen den Versionen

Aus Programmieren-Wiki
Keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
 
(2 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
{{Bewertungsrichtlinie
{{CategoryBlock
|baustelle=Ja
|Baustelle=Ja
|blatt=1
|Java Grundlagen=Nein
|beschreibung=Die Java-API bietet viele Kontrollstrukturen. Darunter viele verschiedene Schleifentypen.
|Organisation=Nein
Je nach dem wie wir über eine Collection an Objekten iterieren wollen, eigenet sich die ein oder andere Schleife mehr als andere.
|Programmierstil=Nein
|Bewertungsrichtlinie=Ja
|blattAnnotation=2
|blattAbzug=3
}}
{{Inhaltsblock
|vorher====Beschreibung===
Java stellt verschiedene Schleifentypen bereit: while-Schleifen, do-while-Schleifen, for-Schleifen & for-each-Schleifen. Jeder von diesen Typen kann grundsätzlich die gleiche Aufgabe übernehmen. Dennoch spiegelt die konkrete Wahl Eigenschaften der Verwendung wider.


Es ist Beispielsweise unnütz viel Schreib- und Lesaufwand über einen Index zu iterieren um ein Objekt zu referenzieren, statt direkt über alle Objekte zu iterieren.
* While-Schleifen eignen sich, wenn lediglich ein boolescher Ausdruck als Bedingung existiert
Um den richtigen Schleifentyp zu wählen, sollten zunächst folgende Fragen gestellt werden:
* Do-While-Schleifen im Falle von einem gewährleisteten ersten Durchlauf.
* Brauche ich einen Index oder nur ein Objekt? (Arrays)
* For-Schleifen sind geschickt für Schleifen mit klar definierter Vor- und Nachbereitung, wie es bei Zählvariablen/Indexdurchläufen der Fall ist.
* Brauche ich einen Key oder einen Value? (Maps)
*Muss ein Array oder eine Liste komplett durchlaufen werden ohne explizit benötigten Index so ist eine for-each-Schleife zu verwenden.
* Muss ich wirklich über alle Indizes/Objekte iterieren?
}}
* Brauche ich überhaupt eine Schleife oder lässt sich mein Problem anders lösen?
{{Inhaltsblock
|schweregrad=leicht
|color=red
|negativ=<syntaxhighlight lang="Java">
|vorher=Negativbeispiel:
Person[] people = new Person[10];
|Beispiel=Person[] people = new Person[10];
// We imagine this array is filled after this point
// We imagine this array is filled after this point
for (int i = 0; i < people.length; i++) {
for (int i = 0; i < people.length; i++) {
System.out.print(people[i].getName());
System.out.print(people[i].getName());
}
}
</syntaxhighlight>
|beispielname=UngeeigneterSchleifentypBad
 
|nachher=Hier iterieren wir über die Indizes des Arrays obwohl wir nur die Objekte referenzieren wollen.
Hier iterieren wir über die Indizes des Arrays obwohl wir nur die Objekte referenzieren wollen.
}}
|positiv=<syntaxhighlight lang="Java">
{{Inhaltsblock
Person[] people = new Person[10];
|color=green
|vorher=Positivbeispiel:
|Beispiel=Person[] people = new Person[10];
// We imagine this array is filled after this point
// We imagine this array is filled after this point
for (Person person : people) {
for (Person person : people) {
System.out.print(person.getName());
System.out.print(person.getName());
}
}
</syntaxhighlight>
|beispielname=UngeeigneterSchleifentypGood
 
|nachher=Hier benutzen wir einen sogenannten "enhanced-for-loop" der Java API. Dieser iteriert direkt über die Objekte, ohne erst über die Indizes zu iterieren, was den Code nicht nur besser lesbar, sondern auch kompakter und einfacher verständlich macht.
Hier benutzen wir einen sogenannten "enhanced-for-loop" der Java API. Dieser iteriert direkt über die Objekte, ohne erst über die Indizes zu iterieren, was den Code nicht nur besser lesbar, sondern auch kompakter und einfacher verständlich macht.
|weiterlesen=Ja
|seite=Komplexität
}}
}}

Aktuelle Version vom 14. Oktober 2025, 09:59 Uhr

🚧 Diese Seite befindet sich in Bearbeitung 🚧
🤓 Diese Seite ist eine Bewertungsrichtlinie, die ab Blatt 2 annotiert und ab Blatt 3 abgezogen wird. 🤓

Beschreibung

Java stellt verschiedene Schleifentypen bereit: while-Schleifen, do-while-Schleifen, for-Schleifen & for-each-Schleifen. Jeder von diesen Typen kann grundsätzlich die gleiche Aufgabe übernehmen. Dennoch spiegelt die konkrete Wahl Eigenschaften der Verwendung wider.

  • While-Schleifen eignen sich, wenn lediglich ein boolescher Ausdruck als Bedingung existiert
  • Do-While-Schleifen im Falle von einem gewährleisteten ersten Durchlauf.
  • For-Schleifen sind geschickt für Schleifen mit klar definierter Vor- und Nachbereitung, wie es bei Zählvariablen/Indexdurchläufen der Fall ist.
  • Muss ein Array oder eine Liste komplett durchlaufen werden ohne explizit benötigten Index so ist eine for-each-Schleife zu verwenden.

Negativbeispiel:

Person[] people = new Person[10];
// We imagine this array is filled after this point
for (int i = 0; i < people.length; i++) {
	System.out.print(people[i].getName());
}
Hier iterieren wir über die Indizes des Arrays obwohl wir nur die Objekte referenzieren wollen.

Positivbeispiel:

Person[] people = new Person[10];
// We imagine this array is filled after this point
for (Person person : people) {
	System.out.print(person.getName());
}
Hier benutzen wir einen sogenannten "enhanced-for-loop" der Java API. Dieser iteriert direkt über die Objekte, ohne erst über die Indizes zu iterieren, was den Code nicht nur besser lesbar, sondern auch kompakter und einfacher verständlich macht.