我的代码存在问题。我正在编写一个必须管理每周下蹲训练的计划。有可能记录以前的培训或编程一整周。在第二种情况下,用户每天都必须输入蹲点的数量和他认为的难度。我用一个有三种声音(easy,medium,hard)的选择框来管理每天的难度,当我读取所选的值时,我将它保存为int以便在程序中轻松地使用它(easy = 1,medium = 2,hard = 3)。使用JavaFX发生OutOfBoundsException
现在,我的问题是,我有7个choiceBox,每天一个,我只需要一个方法来处理它们。每次用户从其中一个choiceBox中选择一个值时,它应该调用扫描所有7 choiceBox的值并更新相对的int值的方法。我采用了这个解决方案,因为我只使用一个方法来处理7 choiceBox,我不知道哪个方法叫做方法。要做到这一点,我创建了一个choiceBox的矢量,我使用了一个从0到< .length的cicle,但是每次我在任何选择框中选择一个声音时,cicle就会跳出界限。我也创建了一个int的相对数组来保存不同的困难。
这里的例外,我的方法:
异常在线程 “的JavaFX应用程序线程” java.lang.ArrayIndexOutOfBoundsException:7
public void weekDifficulties() {
for (j = 0; j < arrayCB.length; j++) {
arrayCB[j].getSelectionModel().selectedIndexProperty().addListener(new ChangeListener<Number>() {
@Override
public void changed(ObservableValue ov, Number oldValue, Number newValue) {
if ((Integer) newValue >= 0 && (arrayCB[j].getItems().get((Integer) newValue).equals("Easy")))
arrayDifficulties[j] = "1";
else if ((Integer) newValue >= 0 && (arrayCB[j].getItems().get((Integer) newValue).equals("Medium")))
arrayDifficulties[j] = "2";
else if ((Integer) newValue >= 0 && (arrayCB[j].getItems().get((Integer) newValue).equals("Hard")))
arrayDifficulties[j] = "3";
}
});
}
}
感谢您的帮助
请指定抛出异常的确切行。另外 - 在哪里定义了“j”?如果它是一个类成员,那么所有的处理程序都会引用它,并且都将使用'arrayCB.length'的值,这是'j'在for循环结束后的值。 – Itai
这不是问题,但如果在任何if语句之前将'(Integer)newValue'和'arrayCB [j] .getItems()'设置为变量,那么读取代码会更容易 –