1 から 41 までの 6 つの乱数を生成するこのプログラムを作成しました。UI には 6 つのテキストフィールドとボタンがあります。ボタンを押すと、テキストフィールドに6つの数字が表示されます。ボタンが押されたときに1つの関数(theNumbers())が起動され、最初の関数は1〜41の数字でObservableListを作成し、2番目の関数は6つの数字をランダムに選択します。
発生する問題は、ボタンを数回押した後に ArrayIndexOutofBound Exception: -1 がスローされることです。通常、数値 0 が生成された後 (または数回後) に (リストにもありません)、IndexOutOfBoundsException が発生することもあります。インデックス: 4、サイズ: 4 例外がスローされます (数値はランダムです)。また、同じ数を 2 回生成したり、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);
}
}
2 番目の関数:
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 ネットブックがおかしくなったのでしょうか? 私の知る限り、これらのエラーは発生しないはずです。