Arraywerte random vertauschen

cr0sh0r

Neues Mitglied
Guten Tag miteinander,

bei der Bearbeitung eines Übungsblattes innerhalb der Programmierung in Java bin ich auf ein Problem gestoßen, wo ich mir ein wenig den Kopf zerstoße Die Aufgabe lautet wie folgt:

" shuffle(): mischt den Inhalt des uebergebenen Arrays zufaellig. Gehen Sie zum Mischen wie folgt vor:
Lassen Sie in einer Schleife im i-ten Durchlauf einen zufaelligen Index aus dem Bereich (i-1) bis (letzte Position im Array) ziehen und tauschen sie die Inhalte des Arrays an dieser Position mit dem Inhalt
an der Position (i-1)."

der Code lautet wie folgt:

Code:
public static void shuffle(int a[]) //Fehlerhaft
    {
        Random r = new Random();
        for(int i=1; i<=a.length;i++)
        {
            int wert = r.nextInt(a.length) + i-1;
            int speicher = a[wert];
            a[wert] = a[i-1];
            a[i-1] = speicher;
            System.out.println(a[wert] + "wird getauscht mit: " + a[i-1]);
        }
    }

Folgender Fehler tritt (ab und zu) auf:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 6
at IntArrayUtil.shuffle(IntArrayUtil.java:160)
at IntArrayUtil.main(IntArrayUtil.java:19)

Mir ist bewusst, dass es an dem zufällig generierter Wert liegt, nur komme ich nicht darauf, wie man dieses Problem lösen kann.
 
Ändere:
int wert = r.nextInt(a.length) + i-1;
in:
int wert = i - 1 + r.nextInt(a.length - (i - 1));
Zusätzlich: Lasse for-Schleifen, die über Arrays laufen, niemals mit 1 beginnen und bis <= length laufen. Damit verwirrst du alle Informatiker. 🙂 Arrayindizes fangen mit 0 an und somit sollten for-Schleifen auch von 0 bis < length laufen. Damit vermeidest du off-by-one errors und auch ständige Subtraktionen wie i-1.
 

Neue Themen


Zurück
Oben