2016-04-01 5 views
0

Zuerst ist es meine erste Anwendung, ich versuche, einen Rechner zu kodieren. Wenn Sie einen Operator drücken, wenn dieser vorhanden ist, berechnen Sie ihn und senden Sie das Ergebnis, um mit dem neuen Prozess fortzufahren. Der Berechnungsprozess geht nicht zum zweiten Schritt, irgendjemand kann helfen, diesen Code richtig arbeiten zu lassen.Einfacher grundlegender Rechner Javafx

import javafx.application.Application; 
import javafx.scene.Scene; 
import javafx.scene.control.Button; 
import javafx.scene.control.Label; 
import javafx.scene.layout.FlowPane; 
import javafx.stage.Stage; 

public class main extends Application { 
    String num1 =""; 
    String num2 =""; 
    String op ; 
    double result= 0; 
    boolean oldop =false ; 
    // the GUI component 
    public void start(Stage stage) throws Exception { 
     Button one = new Button("1"); 
     Button two = new Button("2"); 
     Button pls = new Button("+"); 
     Button eql = new Button("="); 
     Button ac = new Button("AC"); 
     Label lbl = new Label("empty"); 
     FlowPane pane = new FlowPane(); 
     pane.setHgap(10); 
     pane.getChildren().addAll(one,two,pls,eql,ac,lbl); 

     Scene scene = new Scene(pane); 
     stage.setScene(scene); 
     stage.show(); 
     // The Actions on buttons 
     one.setOnAction(e -> 
      { 
      if(!oldop){ 
       num1+='1'; 
      lbl.setText(num1);} 
      else { 
       num2+='1'; 
       lbl.setText(num2);}}); 

     two.setOnAction(e -> 
     { 
      if(!oldop){ 
       num1+='2'; 
       lbl.setText(num1);} 
      else { 
       num2+='2'; 
       lbl.setText(num2);}}); 

     pls.setOnAction(e -> { 
      if(!oldop){ 
       oldop = true; 
       op="+"; 
       lbl.setText(op);} 
      else { 
       result=calc(num1 , num2 ,op); 
       num1=String.valueOf(result); 
       num2=""; 
       op="+"; 
       lbl.setText(num1+op); 
       oldop = true;}}); 

     eql.setOnAction(e ->{ 
      if(oldop){ 
       result=calc(num1 , num2 , op); 
       lbl.setText(String.valueOf(result)); 
       oldop=false; 
       num2="";} 
      else 
       return;}); 

     ac.setOnAction(e -> { 
      num1=""; 
      num2=""; 
      result=0; 
      oldop=false;}); 

    } 
    // The calculation method 
    public int calc (String n1 , String n2 , String op){ 
     switch (op) { 
     case "+" : 
      return Integer.parseInt(n1) + Integer.parseInt(n2) ; 
     case "-" : 
      return Integer.parseInt(n1) - Integer.parseInt(n2) ; 
     case "*" : 
      return Integer.parseInt(n1) * Integer.parseInt(n2) ; 
     case "/" : 
      return Integer.parseInt(n1)/Integer.parseInt(n2) ; 
     default : 
      return 0; 
     } 
    } 

public static void main(String[] args) { 
    Application.launch(args); 
} 
} 
+0

Vielleicht ist dies [einfaches Rechner Beispiel] (https://gist.github.com/jewelsea/4344564) könnte helfen Sie. – jewelsea

Antwort

0

Das Problem, dass Sie nicht das Ergebnis einer vorherigen Operation im zweiten Schritt, da Sie String.valueOf verwenden, die zum Beispiel gibt verwenden zu sein scheint 3,0 für den Int 3 (Ergebnis von 1 + 2). Diese Zeichenfolge kann in calc nicht erneut verwendet werden, da sie nicht mit Inthe.parseInt zu einem int-Objekt zurückgeliefert werden kann.

Ich würde vorschlagen, mit int zu arbeiten und sie nur in Zeichenfolgen für die Etiketten zu konvertieren.

Eine ulgy Abhilfe Sie die folgenden Zeilen am Anfang calc hinzuzufügen wäre:

n1=n1.split("\\.")[0]; 
    n2=n2.split("\\.")[0]; 
+0

Es ist Arbeit, vielen Dank für Sie Hilfe :) Ich bin wirklich dankbar, dass^_ ^ –