2016-12-03 3 views
-1

버튼을 누를 때마다 10 개의 소수를 생성하는 프로그램을 개발하려고하는데 어려움을 겪고 있습니다. 소수를 식별하는 코드는 정확하지만 Label Array를 잘못 처리하기 때문에 NullPointerException 오류가 발생합니다. 나는 아래 코드를 붙여 넣을 것이고, 잘못된 점에 대한 팁을 주셔서 감사합니다.레이블 배열. 소수 생성기. JavaFX

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

난 당신이 배열 요소를

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

또한 한 줄

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

또는 예를 들어

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

, 당신은 사전에 수 수를 초기화하는 것을 잊었다 생각 - 요소 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