Array mit "foreach"-Schleife und nextInt (aus Scanner) beschreiben

sf64

Mitglied
Hallo,
folgender Code soll ein Array mit Zahlen beschreiben, die von der Konsole eingelesen werden.
Es wird aber nur das erste Feld beschrieben.

[Java]
import java.util.Scanner;

class SFE
{
public static void main (String xargs[])
{
int[] zahlen = new int[5];
Scanner eingabe = new Scanner(System.in);

System.out.println("\nBitte 5 Zahlen in einer Zeile eingeben!");
for (int i: zahlen)
{
zahlen = eingabe.nextInt();
}
System.out.println("\nDas Zehnfache der Zahlen ist: ");
for ( int i: zahlen )
{
i *= 10;
System.out.print( i + " ");
}
System.out.println();
}
}
[/Java]

Wenn ich Kopf der ersten for-Schleife ersetze durch:
Java:
 for (int i=0; i < zahlen.length; i++)
dann stimmt alles. Was geschieht im Rumpf dieser for-Schleife und was muss ich dort ändern?
 
Ich verstehe dein Problem nicht ganz, du hast die Lösung schon:
[Java]for (int i=0; i < zahlen.length; i++)[/Java] bedeutet,
dass am Anfang der Schleife die Varibale int i mit dem Wert 0 deklariert wird (int i=0; ),
dann gibt man die Vorrausetztung an, die vor jedem Durchlauf der Schleife überprüft wird und nur wenn die wahr ist (true) wird der Block der Schleife (alles innerhalb der {}-Klammern) durchgeführt (i < zahlen.length; ).
Als Letztes gibt man noch an nach jedem Schleifendurchlauf passieren soll ( i++) und fertig ist die for-Schleife.

Falls das nicht dein Problem war erläutere es bitte ein wenig besser 😀
 
Zuletzt bearbeitet:
Mir geht es nur um die Syntax der "for-each" Schleife
Warum tun diese beiden Zeilen nicht dasgleiche?

Java:
 for (int i=0; i < zahlen.length; i++)
Java:
  for (int i: zahlen)
 
Zuletzt bearbeitet:
Im ersten Fall hat i einen Anfangswert von 0. Bei jedem Iterationsschritt wird de Wert um 1 erhöht, solange bis zahlen.length -1 erreicht ist. Diese Werte sind vom Inhalt der Arrays unabhängig.
Im zweiten Fall gehst du über das Array drüber und holst dir die Einträge. Die Werte sind dann vom Inhalt des Arrays abhängig.
Die foreach Schleife ist äquivalent zu:
Java:
int i = 0;
for(int x = 0; x < zahlen.length; x++){
    i = zahlen[x];
    //mach was mit i
}
 
Warum sollten sie das gleiche tun bei unterschiedlichem Code? 🙂

Schauen wir uns das an deinem Beispiel an: Du initialisierst ein Array der Länge 5, zu Beginn sind alle Werte des Arrays 0.
In der ersten Schleife zählst du nun von i=0 bis 4 (Länge des Arrays - 1) und greifst anschließend auf das i-te Element zu. Also erst auf das an Position 0, dann auf das auf Position 1usw..

In der zweiten Schleife führst du den Schleifen-Rumpf für jeden Wert deines Arrays einmal aus. Da alle Werte auf 0 stehen, greifst du in jedem Schleifendurchlauf später auf zahlen[0] zu ...
 
Ihr habt recht: ich bekomme mit i nur die Werte, die im Array "zahlen" stehen und nicht die Position der Elemente im Array.
Ich vermute, ich kann die "for-each"-Schleife nicht für den beabsichtigten Zweck nutzen.
 
Eigentlich wäre das hier ganz korrekt, da bei deinem Beispiel die Variable i auch außerhalb der Schleife existiert (klugs*****en ist erlaubt 😀)
[Java]
for(int x = 0, int i; x < zahlen.length; x++){
i = zahlen[x];
//mach was mit i
}[/Java]
 

Zurück
Oben