Java ArrayList mit if in For-Each-Schleife wandeln?

Status
Für weitere Antworten geschlossen.

FreddyCollin

Ensign
Registriert
Dez. 2014
Beiträge
236
Hi, ich bin ziemlicher Anfänger und mach erst einige Wochen überhaupt was mit Java. Ich bin grade dabei Schleifen zu üben und zu verstehen und auf folgende Übungsaufgabe gestoßen:

Schreiben Sie den folgenden Java-Programmcode so in eine for-each-Schleife um, dass Sie auch
keine if-Anweisung mehr benötigen (auf Papier im folgenden Kasten).
Code:
ArrayList<String> zutaten = new ArrayList<String>();
...
if (zutaten.size() > 0) {
int i = 0;
do {
i = i + 1;
String z = zutaten.get(i-1);
System.out.println(z);
} while (i <= zutaten.size());
}

Ich weiß nicht genau wie ich vorgehen soll. Wie kann eine For-Each-Schleife denn den ganzen Code ersetzen? Ich wäre für ne Musterlösung seeeehr dankbar, da ich ein paar Versuche gestartet hab, aber keine Ahnung hab obs richtig ist.
 
Code:
ArrayList<String> zutaten = new ArrayList<String>();
...
 if (zutaten.size() > 0) {
 for (int i=1; i <= zutaten.size(); i++) {
  String z = zutaten.get(i-1);
  System.out.println(z);
 }
}
 
baizon schrieb:
Code:
ArrayList<String> zutaten = new ArrayList<String>();
...
 if (zutaten.size() > 0) {
 for (int i=1; i <= zutaten.size(); i++) {
  String z = zutaten.get(i-1);
  System.out.println(z);
 }
}

So einfach geht das? Ich bin baff und mega dankbar!
Aber mir fällt auf: "dass Sie auch
keine if-Anweisung mehr benötigen"
- ist damit ja nicht erfüllt oder
 
Hey Freddie,
das in der Übungsaufgabe ist ja eine fußgesteuerte Schleife.
Sie fängt an bei i=0 und zählt dann bei jeder Iteration i um eins hoch. Jedes mal wird ein element rausgezogen, bis zutaten.size() überschritten wird. Dadurch wird jedes Element einmal angefasst.

Hattest du das soweit verstanden?

Man kann sie deshalb (in diesem Fall) in eine foreach Schleife umwandeln.
Du musst also foreach über die ArrayList zutaten machen und den code ausführen, der im Beispiel nichts mit der Schleife ansich zu tun hat.
Wenn man alles unwichtige streicht bleibt

System.out.println(z);

Du erhältst also:

// ForEach Schleife
for( String z: zutaten )
{
System.out.println(z);
}
 
FreddyCollin schrieb:
Aber mir fällt auf: "dass Sie auch
keine if-Anweisung mehr benötigen"
- ist damit ja nicht erfüllt oder

Dann würde ich es so machen wie MP_H1tm4n es schon geschrieben und erläutert hat.
Code:
ArrayList<String> zutaten = new ArrayList<String>();
...
for (String zutat : zutaten) {
 System.out.println(zutat);
}
 
Vielen Dank ihr beiden! Mit der ausführlichen Erklärung und einem YT Video hab ich es jetzt endlich verstanden!:schaf:

<3 danke
 
@GTR
Naja, Anfänger + Lamba/Streams. Denke das überfordert :p
 
Die if-Anweisung kannst du loswerden indem du mit einem Iterator arbeitest:

for ( Iterator i = zutaten.iterator(); i.hasNext(); )
{
Object o = i.next();
...
}
jetzt kannst du in deiner Schleife einfach das Objekt, auf das der Iterator in der Liste zeigt, ausgeben:
String z = i.next();

edit: Im Prinzip ist diese Lösung identisch mit der von MP_H1tm4n
 
Iterator würde ich nur dann verwenden wenn ich die Liste manipulieren möchte (elemente löschen/hinzufügen) ansonsten ist eine for each Schleife einfacher.

@baizon
Gerade für Anfänger ist ein funktionaler Ansatz eigentlich viel verständlicher.
 
Zuletzt bearbeitet:
Status
Für weitere Antworten geschlossen.
Zurück
Oben