2016-12-03 6 views
-1

ボタンを押すたびに10個の素数を生成するプログラムを開発しようとしていますが、苦労しています。素数を識別するコードは正しいですが、おそらく私はラベル配列をひどく処理しているので、おそらくNullPointerExceptionエラーが発生します。私は下のコードを貼り付けますが、間違っていることについてのヒントをありがとう。ラベルの配列。プライムジェネレータ。 JavaFX

私はあなたが配列要素または

   if ((z == 1)) { 
        primeList[i] = new Label(); 
        primeList[i].setText(Integer.toString(number)); 
        root.getChildren().add(primeList[i]); 
        i++; 
       } 

例えば

.... 
primeList[i] = new Label(); 
primeList[i].setText(Integer.toString(number)); 
.... 

することもできます1行で

primeList[i] = new Label(Integer.toString(number)); 

を初期化するのを忘れて、あなたが事前にすることができると思う

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(); 

    } 
} 
+0

スタックトレースを追加できますか? –

答えて

1

要素iを作成するn advance:

 ... 
     @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) { 
     ... 
+0

voidメソッドの外で宣言し、ボタンの始めに初期化しました。 – Davide

+0

@DavideTormene個々のラベルを初期化する場合は、その初期化を実行するコードを含めるように質問を編集してください。 –

+0

これまでに書いたコードをすべて含めました – Davide

関連する問題