我正在尝试开发一个程序,每次按下按钮时都会生成 10 个素数,但我很挣扎。识别素数的代码是正确的,但我收到错误 NullPointerException 可能是因为我处理标签数组的方式很糟糕。我将粘贴下面的代码,感谢您提供有关问题所在的任何提示。
public class PrimeGenerator extends Application {
Button generate;
Label listNumbers;
int i;
int multiple = 2;
int number = 2;
int z = 1;
int t = 0;
Label[] primeList;
@Override
public void start(Stage primaryStage) throws Exception {
VBox root = new VBox();
generate = new Button("Generate 10 more primes!");
generate.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent e) {
primeList = new Label[10];
while (i < primeList.length) {
multiple = 2;
while (multiple < number) {
t = number % multiple;
if ((t == 0)) {
z = 0;
}
multiple++;
}
// Here I'd like to add the prime number to the array while also adding the Label to the Vbox
if ((z == 1)) {
primeList[i].setText(Integer.toString(number));
root.getChildren().add(primeList[i]);
i++;
}
z = 1;
number++;
}
}
});
root.getChildren().add(generate);
Scene scene = new Scene(root);
primaryStage.setTitle("Prime Numbers Generator");
primaryStage.setScene(scene);
primaryStage.show();
}
}
最佳答案
我认为您忘记初始化数组元素
....
primeList[i] = new Label();
primeList[i].setText(Integer.toString(number));
....
您也可以在一行中
primeList[i] = new Label(Integer.toString(number));
例如
if ((z == 1)) {
primeList[i] = new Label();
primeList[i].setText(Integer.toString(number));
root.getChildren().add(primeList[i]);
i++;
}
或者,您可以提前预先创建元素:
...
@Override
public void handle(ActionEvent e) {
primeList = new Label[10];
for(int labelIdx=0; labelIdx<primeList.length; labelIdx++)
primeList[labelIdx] = new Label();
while (i < primeList.length) {
...
关于java - 标签数组。素数生成器。 JavaFX,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40950658/