2016-12-22 1 views
0

i um ein Programm das Ergebnis gcd (größter gemeinsamer Teiler) zwischen 2 ganze Zahlen Schritt für Schritt nicht nur das Endergebnis in Java fxjavafx Etikett doesnt anzeigen loop Ergebnis

hier ist die Controller-Klasse für sie zeigen

package sample; 

import javafx.fxml.FXML; 
import javafx.fxml.Initializable; 
import javafx.scene.control.Alert; 
import javafx.scene.control.Label; 
import javafx.scene.control.TextArea; 
import javafx.scene.control.TextField; 
import javafx.scene.text.Text; 
import javafx.scene.text.TextFlow; 
import javafx.stage.Stage; 

import javafx.event.ActionEvent; 

import java.io.IOException; 
import java.net.URL; 
import java.util.ResourceBundle; 

public class Controller implements Initializable { 
    int q, r1, r2, r3, r4, r; 


    private Main main; 
    private Stage primaryStage; 


    public void setMain(Main main, Stage primaryStage) { 
     this.main = main; 
     this.primaryStage = primaryStage; 
    } 

    @FXML 
    private Label label; 
    @FXML 
    private TextFlow tf; 
    @FXML 
    private TextArea ta; 
    @FXML 
    private Text t; 
    @FXML 
    private TextField field; 
    @FXML 
    private TextField field1; 

    @FXML 
    private void handleButtonAction(ActionEvent event) { 
     String t1 = field.getText(); 
     String t2 = field1.getText(); 
     if (t1.isEmpty() || t2.isEmpty()) { 
      Alert alert = new Alert(Alert.AlertType.WARNING); 
      alert.setTitle("Warning"); 
      alert.setHeaderText("Enter Values"); 
      alert.setContentText("you have to enter Integer Numbers"); 
      alert.showAndWait(); 

     } else { 
      try { 
       r1 = Integer.parseInt(t1); 
       r2 = Integer.parseInt(t2); 
       if (r1 < r2) { 

        r3 = r2; 
        r4 = r1; 
        r = r3 % r4; 
        q = r3/r4; 
        String t = ("r1=" + r3 + "  " + "r2=" + r4 + "  " + "q=" + q + "  " + "r=" + r); 
        String t6 = new String(); 
        while (r != 0) { 


         r3 = r4; 
         r4 = r; 
         r = r3 % r4; 
         q = r3/r4; 
         t6 = "r1=" + r3 + "  " + "r2=" + r4 + "  " + "q=" + q + "  " + "r=" + r; 
         System.out.println(t6); 

        } 
        String t7 = ("gcd=" + r4); 
        label.setText(t + "\n" + t6 + "\n" + t7 + "\n"); 
        label.setWrapText(true); 
       } else { 
        r = r1 % r2; 
        q = r1/r2; 
        String t3 = ("r1=" + r1 + "  " + "r2=" + r2 + "  " + "q=" + q + "  " + "r=" + r); 
        String t4 = new String(); 
        //this part of code 
        while (r != 0) { 


         r1 = r2; 
         r2 = r; 
         r = r1 % r2; 
         q = r1/r2; 
         t4 = ("r1=" + r1 + "  " + "r2=" + r2 + "  " + "q=" + q + "  " + "r=" + r); 

        } 
        String t5 = ("gcd=" + r2); 
        label.setText(t3 + "\n" + t4 + "\n" + t5 + "\n"); 



       } 
      } catch (Exception e) { 
       Alert alert = new Alert(Alert.AlertType.WARNING); 
       alert.setTitle("Warning"); 
       alert.setHeaderText("Values Error"); 
       alert.setContentText("you can only enter Integer Numbers"); 
       alert.showAndWait(); 

      } 
      field.clear(); 
      field1.clear(); 
     } 

    } 



    public void close(){ 
     primaryStage.close(); 
    } 
    @Override 
    public void initialize(URL url, ResourceBundle rb){} 
    public void changeWindow(){ 
     main.secondWindow(); 
    } 

} 

jetzt hier ist das Ergebnis, wenn ich zum Beispiel eingeben 26 15 hier wird das Ergebnis

r1=26  r2=15  q=1  r=11 
r1=3  r2=1  q=3  r=0 
gcd=1 

aber das Ergebnis sollte so sein, wie es Affe ist ar im Terminal

r1=26  r2=15  q=1  r=11 
r1=15  r2=11  q=1  r=4 
r1=11  r2=4  q=2  r=3 
r1=4  r2=3  q=1  r=1 
r1=3  r2=1  q=3  r=0 
1 

so, wie ich sagte, warum das Etikett nur das Endergebnis der Schleife zeigt nicht die ganze Schleife wie das Terminal zeigt es

+0

Haben Sie versucht, Ihren Code zu debuggen? – n247s

+0

Im Moment gibt es zu viel Code, um eine hilfreiche Antwort zu geben. Bitte erstellen Sie ein [minimales, vollständiges und überprüfbares Beispiel] (http://stackoverflow.com/help/mcve). – n247s

+0

Ich versuchte, aber kein Problem –

Antwort

1

ruft Wenn Sie jeden Schritt in der Label aufnehmen möchten, müssen Sie etwas auf das Endergebnis für jede Schleifeniterationslatenzzeit hinzuzufügen. Du machst so etwas nicht. Ich empfehle eine StringBuilder für diesen Zweck verwendet:

if (r1 > r2) { 
    int t = r1; 
    r1 = r2; 
    r2 = t; 
} 
StringBuilder sb = new StringBuilder(); 
while (r1 > 0) { 
    int temp = r2 % r1; 
    sb.append("r1=").append(r2).append("  r2=").append(r1).append("  q=").append(r2/r1).append("  r=").append(temp).append('\n'); 
    r2 = r1; 
    r1 = temp; 
} 
sb.append("gcd=").append(r2); 
label.setText(sb.toString()); 
+0

Tnx Mann es funktioniert –

1

Das Problem ist, dass Ihre Logik läuft withing den Event Dispatch Gewinde (EDT). Solange Ihre Logik läuft, kann der EDT den Bildschirm nicht aktualisieren.

Sie benötigen eine Logik in eine separate Bedrohung zu bewegen, die die setText() Methode innerhalb Platform.runLater()

+0

Tnx für ur Antwort Mann das hört sich gut an, aber ich habe keine Zeit, es zu suchen krank Suche es einmal ich habe Zeit –