Ich habe eine ArrayList, mit etwa 80 Objekten, versuche ich zufällig eines der Objekte auszuwählen, es einem anderen Objekt zuzuweisen, es aus der Array-Liste zu entfernen und dann das ausgewählte Objekt zurückzugeben. Stattdessen gebe ich Objekte zurück, die bereits entfernt wurden.Warum wählt meine Array-Liste Elemente aus, die entfernt wurden?
hier ist mein Code:
while (!ballStorage.isEmpty()) {
SecureRandom rnd = new SecureRandom();
int arraySize = ballStorage.size();//this is 80
for (int j = 80; j >= 0; j--) {
while (arraySize > 0) {
int i = rnd.nextInt(arraySize);
ballSelected = ballStorage.get(i);
ballStorage.remove(i);
ballStorage.trimToSize();
arraySize--;
//debugging println's
System.out.print(ballStorage);
System.out.println("random number generated is: " + i);
System.out.println("ball selected is: " +ballSelected);
System.out.println("Array size is: " + arraySize);
return ballSelected;
}
}
}
return ballSelected;
//output:45W,[62Bl,, 74Bl,]random number generated is: 2
ball selected is: 16W,
Array size is: 2
16W,[62Bl,]random number generated is: 1
ball selected is: 74Bl,
Array size is: 1
74Bl,[]random number generated is: 0
ball selected is: 62Bl,
Array size is: 0
Sie aus dem Inneren einer Schleife (ohne Bedingung Prüfung) zurückkehrt, sind Sie sicher? Ihre while-Schleife wird niemals mehr als einmal ausgeführt. Auch while (size> 0) {if (size == 0) 'ist redundant, weil die if-Bedingung niemals wahr sein wird. – Moira
Das wird den gleichen Eintrag nicht zweimal auswählen. Es könnte scheinen, wenn die ArrayList Duplikate enthält. Aber es gibt eine Reihe von Problemen mit dem Code. Sie machen zwei Schleifen, kehren aber von der ersten Iteration von beiden zurück und machen beide beide sinnlos. Sie haben eine Schleifenbedingung ('while (arraySize> 0)', wobei die erste Anweisung innerhalb des Körpers nach einer unmöglichen Bedingung sucht ('if (arraySize == 0)'; aber Sie wissen, dass es nicht 0 ist, es ist> 0) die 'while' wäre zu Ende). Wir können Ihnen nicht sagen, was an diesem Code-Bruchteil falsch ist. Wir brauchen einen [mcve]. –