Nabend zusammen,
beim Mischen von Werten eines Arrays kann ich nicht nachvollziehen wieso die Werte im neuen Array falsch positioniert werden.
Ausgabe auf dem Bildschirm:
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?
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:
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?