Array "schütteln"

HonniCilest

Erfahrenes Mitglied
Hi Leute,

schonmal vorweg - gegoogelt und so hab ich natürlich schon, nur habe ich nix gefunden (wahrscheinlich mal wieder nach falschen Begriffen gesucht).

Mein Anliegen ist eigentlich ganz einfach - ich möchte ein sortiertes Feld einfach "schütteln", d.h. die einzelnen Elemente sollen in keiner strukturierten Reihenfolge mehr im Feld erscheinen und nach jedem "schütteln" soll das Feld anders aussehen.

Gibt es irgendeinen Befehl oder einen Algorithmus, der mir derartiges realisieren könnte? Ich kam schon auf die Idee es wie folgt zu machen:
1. Erstelle ein leeres Array gleicher Länge
2. Füge die Elemente aus dem zu schüttelnden Array nach dem Zufallszahlenprinzip dem leeren Feld nacheinander hinzu (dabei muss natürlich überprüft werden, ob dies schon hinzugefügt wurde)

Wenn mir niemand was anderes vorschlagen kann würde ich es wahrscheinlich auch so machen, aber ich find den Weg umständlich und bei größeren Arrays unter Umständen auch unperformant.

Freue mich auf eure Antworten.
 
hi,

ich glaube es ist generell nur auf umwegen zu machen. Ich selber kenn kein wie du sagst "Befehl" der das macht.

Ich habe so etwas ähnliches mal für die Berufschule machen müssen da habe ich einfach das prinzip von bubbelsort genommen nur nicht das ich die zahlen miteinander verglichenhabe sondern mit einer Random zahl die höchstens sogroß wie die höchste zahl vom array und höchstens so niedrig wie die nidrigste zahl vom array.

Hatt damals immer gut geklappt. Leider bin ich gerade nicht aufm Laptop sonst würd ich dir gerade schnell meinen code Posten.

Gruß
 
Ich weiß nicht, ob es schöner geht.
Ich würde es so machen:
Code:
//Object[] array;
List<Object> tmpList = Arrays.asList(array);
Collections.shuffle(tmpList);
array = tmpList.toArray(new Object[tmpList.size()]);
 
Zuletzt bearbeitet:
Ich finde die Antworten super, zumal mir inzwischen noch der Gedanke gekommen war einfach x-mal zwei Zufallszahlen und jeweis die 2 Indexes zu vertauschen.

Auf das Wort mixen bin ich nicht gekommen, ich werd mich erstmal ransetzen und mir da die Suchergbnisse durchschauen :)

Ansonsten sieht die Möglichkeit von pinsleepe auf den ersten Blick nicht schlecht aus finde ich :)
 
Ich wollt nur noch ma bestaetigen das das die einfachste ist :D Und das es auch so in der APi steht, somit haette man selbst das finden koennen :p Und warum sollte es dann ander schoener gehen, als mit einer einzigen Methode :D
 
Danke! Ich habe es auch mir der Shuffle-Methode realisiert - ich wusste es, ich hab einfach wieder nach den falschen Begriffen gegooglet :D

Java:
// MEMBER ist ein statischer String, indem der Pfad zum Ordner mit den Bildern der Member gespeichert ist
File imageDirectory = new File(MEMBER);

//da die Anzahl variieren kann, sucht er alle Dateien im Ordner und speichert die in einem Array Typ File[]
memberPictures = imageDirectory.listFiles();

// Speichert die Pfade in die Liste
java.util.List myList = Arrays.asList(memberPictures);

// mixt
Collections.shuffle(myList);

// speichert das Ergebnis
memberPictures = (File[])myList.toArray();

Habs getestet und es funktioniert :)
 
Zuletzt bearbeitet:
MiMi, nicht gleich aufregen.
Stimmt schon, dass shuffle() eine einzige Methode ist, die man braucht. Die wendet man aber ja nicht direkt an das Array und da fängt es an, dass man es vllt nicht auf Anhieb findet...

HonniCilest, geht das nicht so:
Code:
memberPictures = imageDirectory.listFiles();
List<File> myList = Arrays.asList(memberPictures);
Collections.shuffle(myList);
memberPictures = myList.toArray(new File[myList.size()]);
?

Das Casten auf String und Umwandeln toString() könntest Du damit sparen :)

//EDIT: meine Antwort war auf die Vorversion bezogen, dennoch kannst du jetzt auch das Casten auf File[] noch umgehen :)
 

Neue Beiträge

Zurück