Ich habe zwei Arraylist filelist
und imgList
welche miteinander in Beziehung, zB „h1.txt“ im Zusammenhang mit „e1.jpg“. Wie kann die Liste imgList
nach der Randomisierung von automatisch randomisiert werden fileList
? Wenn wir wie in Excel eine bestimmte Spalte sortieren, folgt automatisch die andere Spalte?
String [] file = {"H1.txt","H2.txt","H3.txt","M4.txt","M5.txt","M6.txt"};
ArrayList<String> fileList = new ArrayList<String>(Arrays.asList(file));
String [] img = {"e1.jpg","e2.jpg","e3.jpg","e4.jpg","e5.jpg","e6.jpg"};
ArrayList<String> imgList = new ArrayList<String>(Arrays.asList(img));
//randomized files
Collections.shuffle(fileList);
Ausgabe nach Randomisierung zB:
fileList = {"M4.txt","M6.txt","H3.txt","M5.txt","H2.txt","H1.txt"};
beabsichtigte Ausgabe:
imgList = {"e4.jpg","e6.jpg","e3.jpg","e5.jpg","e2.jpg","e1.jpg"};
quelle
Der einfachste Ansatz besteht darin, die beiden Werte zu einem Typ zusammenzufassen, der sowohl das Bild als auch die Datei enthält. Dann bauen ein
ArrayList
von , dass sie und mischen.Dies verbessert auch die Kapselung und gibt Ihnen die Eigenschaft, dass Sie automatisch immer die gleiche Anzahl von Dateien wie Bilder haben.
Eine Alternative, wenn Sie diese Idee wirklich nicht mögen, wäre, den Shuffle-Code selbst zu schreiben (es gibt viele Beispiele für einen modifizierten Fisher-Yates-Shuffle in Java, einschließlich mehrerer auf Stack Overflow, wie ich vermute) und einfach beide Listen unter zu bearbeiten die selbe Zeit. Ich würde jedoch dringend empfehlen, den Ansatz "Verkapselung verbessern" zu wählen.
quelle
Sie können dies mit Karten tun:
Dadurch werden die Bilder in zufälliger Reihenfolge durchlaufen.
quelle
Dies kann mit der Shuffle-Methode erfolgen:
quelle
Anstatt zwei Arrays von Strings zu haben, sollten Sie ein Array einer benutzerdefinierten Klasse haben, die Ihre zwei Strings enthält.
quelle
Sie können ein Array mit den Zahlen 0 bis 5 erstellen und diese mischen. Verwenden Sie das Ergebnis dann als Zuordnung von "oldIndex -> newIndex" und wenden Sie diese Zuordnung auf Ihre beiden ursprünglichen Arrays an.
quelle
Nicht ganz sicher, was Sie unter "automatisch" verstehen - Sie können ein Containerobjekt erstellen, das beide Objekte enthält:
öffentliche Klasse FileImageHolder {String fileName; String imageName; // TODO: füge hier etwas ein}
Und dann füge das in eine Array-Liste ein und randomisiere diese Array-Liste.
Andernfalls müssten Sie verfolgen, wo sich jedes Element in einer Liste bewegt hat, und es auch in die andere verschieben.
quelle
Wenn es keine Möglichkeit gibt, den alten Index der Elemente nach dem Mischen abzurufen, kann ich dies auf zwei Arten tun:
A) Erstellen Sie eine weitere Liste multi_shuffler = [0, 1, 2, ..., file.size ()] und mischen Sie sie. Führen Sie eine Schleife durch, um die Reihenfolge für Ihre gemischten Datei- / Bildlisten zu erhalten.
ArrayList newFileList = new ArrayList (); ArrayList newImgList = new ArrayList (); für (i = 0; i
oder B) Erstellen Sie eine StringWrapper-Klasse, die die Datei- / Bildnamen enthält, und kombinieren Sie die beiden bereits vorhandenen Listen zu einer: ArrayList kombinierte Liste;
quelle