M
Mort
Stammgast
- 269
Hallo, mal ein Problem, dass wahrscheinlich nicht mit Android zu tun hat, mich aber schon länger nervt.
Ich habe für die "mischen über alle Ordner"-Funktion im MortPlayer folgenden Code (leicht gekürzt):
(shuffleFolders und shuffleFiles sind private int[]-Properties der Klasse)
Jetzt bekomme ich gelegentlich Fehlermeldungen, die eine ArrayIndexOutOfBoundsException bei "shuffleFolders = foldersDeck.get(pos);" enthalten. Ich kann mir aber nicht erklären, wie das zustande kommen kann, und selbst konnte ich den Fehler noch nicht nachvollziehen. Übersehe ich irgendwas wichtiges?
Eigentlich müssten foldersDeck und filesDeck gleich groß sein, sie werden an nur einer Stelle gleichzeitig gefüllt. rand.nextInt dürfte keinen Wert über dem höchsten Index liefern. i kann nicht größer als fileCount werden, das kurz vorher als Array-Größe verwendet wurde. Wo kommt da ein ungültiger Index her???
(Dass shuffeFiles/Folders zwischendurch per Multithreading auf andere Arrays zeigen ist übrigens auch sehr unwahrscheinlich, der Code läuft in einem synchronized-Block und wird ohnehin nicht allzu oft aufgerufen).
Ich habe für die "mischen über alle Ordner"-Funktion im MortPlayer folgenden Code (leicht gekürzt):
Code:
Random rand = new Random( new Date().getTime() );
int start = 0;
List<Integer> foldersDeck = new ArrayList<Integer>();
List<Integer> filesDeck = new ArrayList<Integer>();
for ( alle Dateien in den ersten, zufälligen Ordnern ) {
foldersDeck.add( shuffleFolders[i] );
filesDeck.add( ii );
}
int fileCount = Math.min(maxFilesForShuffleAll, filesDeck.size());
shuffleFolders = new int[fileCount];
shuffleFiles = new int[fileCount];
/* etwas Handling um aktuelle und ggf. gewählte nächste Datei an den
Anfang der Liste zu setzen */
for ( int i = start; i < fileCount && filesDeck.size() > 0; i++ ) {
pos = rand.nextInt( filesDeck.size() );
shuffleFolders[i] = foldersDeck.get(pos);
shuffleFiles[i] = filesDeck.get(pos);
foldersDeck.remove(pos);
filesDeck.remove(pos);
}
Jetzt bekomme ich gelegentlich Fehlermeldungen, die eine ArrayIndexOutOfBoundsException bei "shuffleFolders = foldersDeck.get(pos);" enthalten. Ich kann mir aber nicht erklären, wie das zustande kommen kann, und selbst konnte ich den Fehler noch nicht nachvollziehen. Übersehe ich irgendwas wichtiges?
Eigentlich müssten foldersDeck und filesDeck gleich groß sein, sie werden an nur einer Stelle gleichzeitig gefüllt. rand.nextInt dürfte keinen Wert über dem höchsten Index liefern. i kann nicht größer als fileCount werden, das kurz vorher als Array-Größe verwendet wurde. Wo kommt da ein ungültiger Index her???
(Dass shuffeFiles/Folders zwischendurch per Multithreading auf andere Arrays zeigen ist übrigens auch sehr unwahrscheinlich, der Code läuft in einem synchronized-Block und wird ohnehin nicht allzu oft aufgerufen).