我制作了这个程序,它产生 6 个介于 1 和 41 之间的随机数。在 UI 中,我有 6 个文本字段和一个按钮。如果我按下按钮,则 6 个数字将显示在文本字段中。按下按钮时,我触发了 1 个函数(theNumbers()),第一个函数创建了一个带有数字 1-41 的 ObservableList,第二个函数随机选择了 6 个数字。
发生的问题是,在按下按钮几次后,会抛出 ArrayIndexOutofBound Exception: -1,通常在产生数字 0 之后(或几次之后)(甚至不在列表中),有时还会出现 IndexOutOfBoundsException:索引:4,大小:4 抛出异常(数量是随机的)。此外,它似乎能够产生两次相同的数字或大于 41 的数字。(见 151)
这是我的代码:
第一个功能:
ObservableList<Integer> list1 = FXCollections.observableArrayList();
private void createList(ObservableList<Integer> list1) {
this.list1 = list1;
int numbers = 41;
for (int i = 1; i <= numbers; i++) {
list1.add(i);
}
}
第二个功能:
private void theNumbers() {
createList(list1);
ObservableList<Integer> finalNums = FXCollections.observableArrayList();
try {
for (int i = 0; i < 6; i++) {
FXCollections.shuffle(list1);
int lucky = new Random().nextInt(list1.size());
finalNums.add(lucky);
list1.remove(list1.indexOf(lucky));
}
} catch (Exception ex) {
throw ex;
}
FXCollections.sort(finalNums);
textField1.setText(finalNums.get(0).toString());
textField2.setText(finalNums.get(1).toString());
textField3.setText(finalNums.get(2).toString());
textField4.setText(finalNums.get(3).toString());
textField5.setText(finalNums.get(4).toString());
textField6.setText(finalNums.get(5).toString());
list1.clear();
finalNums.clear();
}
任何线索为什么它会这样做?会不会是我的 Acer Aspire One 上网本搞砸了?据我所知,这些错误不应该发生。