简单的基本计算器Javafx

时间:2016-04-01 06:14:31

标签: javafx javafx-8 calculator

首先,它是我的第一个应用,我正在尝试编写计算器代码。按下操作员时,如果有旧操作员,则计算并发送结果以继续操作新过程。计算过程没有进入第二步,任何人都可以帮助使这段代码正常工作吗?

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

1 个答案:

答案 0 :(得分:0)

问题似乎是你不能在第二步中使用前一个操作的结果,因为你使用的是String.valueOf,例如int 3为3.0(结果为1 + 2)。此字符串不能在calc中再次使用,因为它无法使用`Integer.parseInt解析回int。

我建议使用int并仅将它们转换为标签的字符串。

ulgy解决方法是在calc的开头添加以下行:

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