2016-05-09 10 views
0

Ich erhalte einen Fehler in der Konsole, die "Ausnahme im Thread" JavaFX Application Thread "java.lang.StackOverflowError" liest. Dieser Fehler tritt auf, wenn ich eine negative Zahl verwende; Ich weiß, dass es in dieser if/else-Anweisung ist, da nichts einen Fehler erzeugte, bis ich versuchte, die Textfelder wieder auf leer zu bringen.Button Event Handler Aktualisierung Textfeld Problem

Der Fehler scheint auf meine Rückführungslinien der faktoriellen Methode zu zeigen, dies geschieht nur, wenn ich die Textfelder nach dem erneuten Anklicken der Schaltfläche auf Leerzeichen zurücksetze.

EDIT: Ich habe vergessen zu sagen, dass das Programm kompiliert und die Felder korrekt zurückgesetzt wird, es wirft nur diesen Fehler in die Konsole währenddessen. Wie kann ich das beheben?

butCalcFact.setOnAction(new EventHandler<ActionEvent>() { 
     @Override 
     public void handle(ActionEvent event) { 

      String inputText = tfInput.getText(); 

      if (Integer.parseInt(inputText) < 0) { 
       tfError.setText("Error: Invalid number entered."); 
       tfResult.setText(" "); 
       System.out.println("Error: Invalid number entered."); 
      } else 
       tfError.setText(" "); 
       tfResult.setText(factorial(Integer.parseInt(inputText)) + ""); 

     } 
    }); 

public static long factorial(int n) { 
    if (n == 0) // Base case 
     return 1; 
    else 
     return n * factorial(n - 1); // Recursive call 
} 

Antwort

2

Fehlende Klammern?

Next Code ruft für jeden Eingabetext:

tfResult.setText(factorial(Integer.parseInt(inputText)) + ""); 

Und Methode factorial keine negativen Werte richtig umgehen kann.

+0

Die Methode soll aufgerufen werden, wenn die Zahl 0 oder größer ist, also warum ich es in die else-Anweisung einfügen. Wenn die Nummer negativ ist, wird sie nicht aufgerufen? – Jake

+0

Whoops egal Ich habe die fehlende Klammer gesehen, danke! – Jake