Iterationen in Feldern

HaliGali9761

Mitglied
Guten Abend, ich hoffe ihr könntet mir etwas auf die Sprünge helfen.
Java:
public class IterationenImFeld2 {
    public static void main(String[] args) {
        int[] d = new int[10];
        for (int i = 0; i < 10; i++)
            d[i] = 9 - i;
        for (int i = 0; i < 10; i++)
            System.out.print(d[i] = d[d[i]]);

    }
}
Ich habe folgenden Code.
In der ersten Rechnung d[i][i] werden ja dem Feld die Werte 9,8,7,6,5,4,3,2,1,0 zugewiesen.

Meine Frage ist was genau bei d[d[i]] denn passiert. Als Ergebnis kommen hier 0,1,2,3,4,4,3,2,1,0 raus.

d[d[i[i]] bewirkt doch dass das Array von hinten durchlaufen wird? Sprich ich bekomme in den ersten 5 Ausgaben die Werte 0,1,2,3,4 heraus weil die Reihenfolge umgeändert wird.Wieso bekomme ich in den letzten 5 Ausgaben anschließend dann die Zahlenfolge 4,3,2,1,0, wenn das Array doch rückwärts durchlaufen wird müsste doch auch das Ergebnis 0,1,2,3,4,5,6... sein?

Wäre echt froh wenn mir jemand den Programmablauf erklären könnnte, ich finde einfach keine logische Erklärung
 
Zuletzt bearbeitet von einem Moderator:
Du musst dir vor Augen führen, dass sich das Array durch die Anweisung d = d[d[i]] ja auch verändert während du darüber iterierst.
Hier mal die ersten 7 Durchläufe. Du wirst merken, dass sich ab dem 5. Durchlauf nichts mehr ändert.
Code:
i = 0  d[i] = 9  d[d[i]] = 0
Array: [0, 8, 7, 6, 5, 4, 3, 2, 1, 0]

i = 1 d[i] = 8  d[d[i]] = 1
d[1] = d[d[1]] --> d[1] = 1
Array: [0, 1, 7, 6, 5, 4, 3, 2, 1, 0]

i = 2 d[i] = 7  d[d[i]] = 2
d[2] = d[d[2]]  --> d[2] = 2
Array: [0, 1, 2, 6, 5, 4, 3, 2, 1, 0]

i = 3  d[i] = 6  d[d[i]] = 3
Array: [0, 1, 2, 3, 5, 4, 3, 2, 1, 0]

i = 4  d[i] = 5  d[d[i]] = 4
Array: [0, 1, 2, 3, 4, 4, 3, 2, 1, 0]

// ab jetzt ändert sich nichts mehr. d[i] == d[d[i]]
i = 5  d[i] = 4  d[d[i]] = 4
Array: [0, 1, 2, 3, 4, 4, 3, 2, 1, 0]

i = 6  d[i] = 3  d[d[i]] = 3
Array: [0, 1, 2, 3, 4, 4, 3, 2, 1, 0]
 
Vielen Dank für die schnelle Antwort, sehr klasse Darstellung und super erklärt. Ich habe mir nicht vor Augen geführt dass die Inhalte des Feldes bei d[d[i]] in den Durchläufen einzeln überschrieben werden und ausgelassen das bei d[i]==d[d[i]] dann keine Änderungen mehr auftreten. War sehr hilfreich, weiter so! 🙂
 
Zuletzt bearbeitet von einem Moderator:

Zurück
Oben