Array-Werte werden gemischt, ohne Logik

cookiedough

Mitglied
Nabend zusammen,

beim Mischen von Werten eines Arrays kann ich nicht nachvollziehen wieso die Werte im neuen Array falsch positioniert werden.


Java:
public class Mischer {

    public static void main(String[] args) {

        // ursprüngliche Wörter-Reigenfolge
        System.out.println("\nursprüngliche Wörter-Reigenfolge:");
        String wort[] = {"Eins", "Zwei", "Drei", "Vier", "Fünf"};
        int wortID[] = new int[5];
        for(int i = 0;i<wortID.length;i++){
            wortID[i] = i;
            System.out.println(wort[i]);
        }

        // mischen
        System.out.println("\nmischen:");
        for(int i = 0;i<wortID.length;i++) {
            double mischid = (int) (i + (Math.random() * (wortID.length - i)));
            int mischid1 = (int)mischid;
            System.out.println("Zufalszahl ist: " + mischid1);
            String puffer = wort[mischid1];
            wort[mischid1] = wort[i];
            wort[i] = puffer;
        }

        // Ausgabe in gemischter Reighenfolge
        System.out.println("\nAusgabe in gemischter Reighenfolge:");
        for(String kkk : wort) {
            System.out.println(kkk);
        }
    }
}

Ausgabe auf dem Bildschirm:
e97im7v.png


Ich habe versucht das nachzuvollziehen, aber sobald ein Feld im neuen Array bereits belegt ist wird der zu tauschende Wert willkürlich irgendwo in das neue Array gesetzt.

Hier eine nachvollziehbare Beschreibung was passiert.

Erster Schleifendurchlauf:
In der Variablen puffer wird der Inhalt aus Feld 0 des Arrays gespeichert.
Dann wird der Inhalt aus Feld 0 mit dem Inhalt von Feld 0 (= Zufallszahl) überschrieben.
Zuletzt wird der in puffer gespeicherte Wert in das Feld 0 (= Zufallszahl) geschrieben.
Fazit: Die Inhalte der Felder 0 und 0 werden getauscht.
"Eins" (urspr im Feld-Nr 0) steht im neuen Array im 0.Feld
also: neues Array = {Eins, ?, ?, ?, ?}

Zweiter Schleifendurchlauf:
Fazit: Die Inhalte der Felder 1 und 3 werden getauscht.
"Zwei" (urspr im Feld-Nr 1) steht im neuen Array im 3.Feld.
also: neues Array = {Eins, ?, Zwei, ?, ?}

Dritter Schleifendurchlauf:
Fazit: Die Inhalte der Felder 2 und 3 werden getauscht.
"Drei" (urspr im Feld-Nr 2) steht im neuen Array im 3.Feld.
also: neues Array = {Eins, ?, Zwei, ?, Drei}

Oh nein, das dritte Feld im neuen Array ist belegt! Aber wieso ist die Drei an letzter Stelle ???
Laut Ausgabe auf dem Bildschirm ist der Wert "Drei" (der ursprünglich im aus dem Feld-Nr. 2 kommt) an letzter Stelle des neuen Arrays.
Wie kann das sein?
 
Ich glaube du hast da zwei Denkfehler: Indizes beginnen bei 0, in deiner Rechnung ist es z.T. bei Eins beginnend, und es gibt kein neues Array, sondern das bestehende wird verändert.

Ich nutz der Kürze mal [A,B,C,D,E], in der ersten Zeile stehen jeweils die Indizes, in der zweiten die Werte.

Zu Beginn:
Code:
[0,1,2,3,4]
[A,B,C,D,E]


0 wird mit 0 getauscht:
Code:
[0,1,2,3,4]
[A,B,C,D,E]

1 wird mit 3 getauscht:
Code:
[0,1,2,3,4]
[A,D,C,B,E]

2 wird mit 3 getauscht:
Code:
[0,1,2,3,4]
[A,D,B,C,E]

3 wird mit 4 getauscht:
Code:
[0,1,2,3,4]
[A,D,B,E,C]

4 wird mit 4 getauscht:
Code:
[0,1,2,3,4]
[A,D,B,E,C]
also
Code:
[Eins, Vier, Zwei, Fünf, Drei]
 
Also dein Text beschreibt ganz offensichtlich nicht den Code:
a) Du schreibst etwas von einem neuen Array - Du hast nur ein Array wort und kein neues Array. (Ok, du hast noch wortId, aber das Array nutzt Du ja nicht wirklich ...)
b) Das Array hat Werte in allen Feldern - Schreib die richtig auf! Also nix mit "?" oder so ...

Also Du hast ein Array aus
1, 2, 3, 4, 5 (in Worten - nicht als Zahlen)

Dann tauscht du 0 mit 0 Also hast Du 1, 2, 3, 4, 5
Dann tauscht Du 1 mit 3 (das ist dann die 2 mit der 4 - wir fangen ja mit Index 0 an!): 1, 4, 3, 2, 5
Dann tauscht Du 2 mit 3 -> 1, 4, 2, 3, 5
Dann tauscht Du 3 mit 4 -> ...
Dann tauscht Du 4 mit 4 -> ...

Also bitte immer ganz exakt schauen und schreiben, was im Code passiert ...
 

Zurück
Oben