标签数组。质数生成器。 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) {
        ...