计算器多个值

时间:2011-09-21 14:40:21

标签: java awt

我完成了我的计算器,感谢在座的人帮助了我。我在这里做了什么:

import java.awt.*;
import java.awt.event.*;

public class SimpleCalculator implements ActionListener
{
    double value1=0,value2=0,result=0;
    static  String command=null;
    int counter=0;

    // containers
    private Frame f;
    private Panel p1, p2, p3, p4,p5,p6;

    // components
    private Label l1, l2, l3;
    static private TextField tf1;
    private Button bAdd, bSub, bMul, bDiv, bClear,b1,b2,b3,b4,b5,b6,b7,b8,b9,b0,bEqual;

     private static void value(String num)
        {
         if((tf1.getText()).equals("0"))
            tf1.setText(num);
          else
            tf1.setText(tf1.getText()+num);
         }
    public SimpleCalculator()
    {
        f = new Frame("My First GUI App");

        p1 = new Panel();
        p2 = new Panel();
        p3 = new Panel();
        p4 = new Panel();
        p5 = new Panel();
        p6 = new Panel();




        tf1 = new TextField(15);

        b1 = new Button("1");
        b2 = new Button("2");
        b3 = new Button("3");
        b4 = new Button("4");   
        b5 = new Button("5");
        b6 = new Button("6");
        b7 = new Button("7");
        b8 = new Button("8");
        b9 = new Button("9");
        b0 = new Button("0");
        bAdd = new Button("+");
        bSub = new Button("-");
        bMul = new Button("*");
        bDiv = new Button("/");
        bClear = new Button("C");
        bEqual = new Button("=");
    }
    public void launchFrame()
    {
        // use default layout manager of the Panel (FlowLayout)
        p1.add(tf1);


        p2.add(b1);
        p2.add(b2);
        p2.add(b3);

        p3.add(b4);
        p3.add(b5);
        p3.add(b6);

        p4.add(b7);
        p4.add(b8);
        p4.add(b9);

        p5.add(b0);

        p6.add(bAdd);
        p6.add(bSub);
        p6.add(bMul);
        p6.add(bDiv);
        p6.add(bClear);
        p6.add(bEqual);


        // change the layout manager of the Frame, 
        // use GridLayout(4, 1)
        f.setLayout(new GridLayout(6, 1));

        f.add(p1);
        f.add(p2);
        f.add(p3);
        f.add(p4);
        f.add(p5);
        f.add(p6);

        f.pack();
        f.setVisible(true);

        // register event handlers
        b1.addActionListener(this);
        b2.addActionListener(this);
        b3.addActionListener(this);
        b4.addActionListener(this);
        b5.addActionListener(this);
        b6.addActionListener(this);
        b7.addActionListener(this);
        b8.addActionListener(this);
        b9.addActionListener(this);
        b0.addActionListener(this);
        bEqual.addActionListener(this);
        bAdd.addActionListener(this);
        bSub.addActionListener(this);
        bMul.addActionListener(this);
        bDiv.addActionListener(this);
        bClear.addActionListener(this);

        f.addWindowListener(new MyCloseButtonHandler());
    }
    // override the actionPerformed method
    public void actionPerformed(ActionEvent ae)
    {

        Object source = ae.getSource();

            if (source == b1)   
                value("1");
            else if (source == b2)
                value("2");
            else if (source == b3)
                value("3");
            else if (source == b4)
                value("4");
            else if (source == b5)
            value("5");
            else if (source == b6)
            value("6");
            else if (source == b7)
            value("7");
            else if (source == b8)
            value("8");
            else if (source == b9)
            value("9");
            else if (source == b0)
            value("0");
            else if(source== bAdd){
            value1=Double.parseDouble(tf1.getText());
            command="+";
            tf1.setText("");
            }
            else if(source==bSub){

            value1=Double.parseDouble(tf1.getText());
            command="-";
            tf1.setText("");

             }
             else if(source==bDiv){
             value1=Double.parseDouble(tf1.getText());
             command="/";
             tf1.setText("");
             }
             else if(source == bMul){
             value1=Double.parseDouble(tf1.getText());
             command="*";
             tf1.setText("");
             }
             else if(source ==bClear)
             tf1.setText("0");
            else if(source==bEqual){
            value2=Double.parseDouble(tf1.getText());
            if(command.equals("+"))
            result=value1+value2;
            else if(command.equals("-"))
            result=value1-value2;
            else if(command.equals("*"))
            result=value1*value2;
            else if(command.equals("/"))
            result=value1/value2;
            command="=";
            tf1.setText(""+result);
            }   

        }

    private class MyCloseButtonHandler extends WindowAdapter
    {
        public void windowClosing(WindowEvent we)
        {
            System.exit(0);
        }
    }
    public static void main(String args[])
    {
    double value1=0;
        SimpleCalculator sc = new SimpleCalculator();
        sc.launchFrame();
    }
}

问题是他们无法连续执行操作,例如1 + 2 + 3,我每次按下操作时都尝试添加值,但它输出错误。

4 个答案:

答案 0 :(得分:1)

我会为您的计算器使用Java的内置Javascript解析器。

答案 1 :(得分:0)

您只存储两个值(value1和value2),因此您只能使用这两个值进行数学运算。想一想如何存储更多价值观。

答案 2 :(得分:0)

为什么不使用像jep这样的工具来解析表达式,除非你需要手工编写代码(比如学校/大学项目)。 无论哪种方式都没有看到存在的解决方案。

答案 3 :(得分:0)

如何显示前两个数字的结果(即结果,哪个有效),然后当它们点击另一个操作数时,您将value1 = resultvalue2作为下一个数字。然后,一旦他们再次达到等于,你得到1+2+3。然后,您可以实现一个清除按钮来设置result = 0