标签数组。质数生成器。 JavaFX
Array of Label. Primes Generator. JavaFX
我正在尝试开发一个程序以在每次按下按钮时生成 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) {
...
我正在尝试开发一个程序以在每次按下按钮时生成 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) {
...