int[] a = {1, 2, 3,4,1};
for (int n: a) {
    a[n] = 0;
}
for (int n: a) {
    System.out.print(n);
}

Dies für jede Schleife, die ein unerwartetes Ergebnis zeigt, wenn ich alle Array-Elemente 0 mache. Anstatt alle '0' anzuzeigen, wird eine Ausgabe wie '00301' ausgegeben. Sie können nicht verstehen, wie dies funktioniert?

0
Devendra Jadhav 24 Feb. 2020 im 07:14

5 Antworten

Beste Antwort

a[n] = 0; setzt a[some_value_from_the_array] auf 0 und nicht alle Array-Elemente auf 0.

2
John3136 24 Feb. 2020 im 04:21

Wenn Sie ausdrucken, was es tut, werden Sie selbst sehen:

int[] a = {1, 2, 3,4,1};
System.out.println(Arrays.toString(a));
for (int n: a) {
    System.out.print("a[" + n + "] = 0;  ->  ");
    a[n] = 0;
    System.out.println(Arrays.toString(a));
}

Ausgabe

[1, 2, 3, 4, 1]
a[1] = 0;  ->  [1, 0, 3, 4, 1]
a[0] = 0;  ->  [0, 0, 3, 4, 1]
a[3] = 0;  ->  [0, 0, 3, 0, 1]
a[0] = 0;  ->  [0, 0, 3, 0, 1]
a[1] = 0;  ->  [0, 0, 3, 0, 1]
0
Andreas 24 Feb. 2020 im 04:38

Im:

for (int n: a) 

n ist der Wert eines bestimmten Index des Arrays, nicht der Index selbst. Sie setzen also grundsätzlich 0 auf Index 1, 2, 3,4,1. Glücklicherweise gibt es keinen Wert größer als 4 (die Länge des Arrays) oder eine negative Zahl, sonst erhalten Sie ArrayIndexOutOfBoundException.

for (int i=0; i<a.length;i++){
  a[i] = 0;
} 

Verwenden Sie den obigen Code und Sie erhalten die erwartete Ausgabe.

1
Amit Bera 24 Feb. 2020 im 04:23

Wie in der Oracle-Dokumentation angegeben, verbirgt Java für jede Schleife den Iterator und gibt Ihnen nur Zugriff auf die Werte in der Iterable (Array). Daher sollte die for-each-Schleife nicht zum Mainupulieren des ursprünglichen Arrays verwendet werden, sondern zum Arbeiten mit den Daten des Arrays. https://docs.oracle.com/javase/ 1.5.0 / docs / guide / language / foreach.html Wenn Sie das ursprüngliche Array manipulieren möchten, verwenden Sie am besten die herkömmliche for-Schleife.

2
Akinsola Michael 24 Feb. 2020 im 04:38

Es sind zwei for-each-Schleifen über den Inhalt eines int[].

Schleife 1: Setzen Sie für jedes n in 1, 2, 3, 4, 1 den Inhalt des Arrays für die Indizes 1, 0, 3, 0 und 1 auf Null. Dies können Sie sehen, indem Sie es in ändern

for (int n: a) {
    System.out.println(n);
    a[n] = 0;
}

Belassen Sie dann den Inhalt von a als 0, 0, 3, 0, 1

Schleife 2: Für jedes n in 0, 0, 3, 0, 1 drucken Sie n.

So druckt Ihr Programm 00301.

1
Elliott Frisch 24 Feb. 2020 im 04:23