2011-09-21 77 views
-1

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

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,我已经尝试添加每次我按下操作的值,但它给了我一个错误的输出。

回答

0

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

+0

但教授严格地告诉我们,我们不允许使用数组,我不会想法。你能提供不同的方式吗? – Gostores

+0

@Gostores,如果您仅限于使用Java的某些API /功能,最好咨询教授或助教,而不要在此问问。 –

+0

然后使用链接列表。 –

0

为什么不使用像这样的工具来解析表达式,除非这是你必须手工编写的代码(如学校/大学项目)。 任何方式都不会伤害到看到存在的解决方案。

1

我会为你的计算器使用Java的内置Javascript分析器。

+0

Java中是否有内置的JavaScript解析器? – Jori

0

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