import java.awt.*;
import java.awt.event.*;
import javax.swing.*;class Calculator implements ActionListener
{
Frame F1=new Frame("Tony Calculator");
Panel P1=new Panel();
TextField T1=new TextField(15);
Button B1,B2,B3,B4,B5,B6,B7,B8,B9,B0,Ba,Bm,Bmul,Bdiv,Be,Bcle;
String str;
boolean end; public void WeaveWindows(){
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");Ba=new Button("+");Bm=new Button("-");
Bmul=new Button("*");Bdiv=new Button("/");Be=new Button("=");Bcle=new Button("clean");
P1.setLayout(new GridLayout(4,4));
P1.add(B1);B1.addActionListener(this);
P1.add(B2);B2.addActionListener(this);
P1.add(B3);B3.addActionListener(this);
P1.add(B4);B4.addActionListener(this);
P1.add(B5);B5.addActionListener(this);
P1.add(B6);B6.addActionListener(this);
P1.add(B7);B7.addActionListener(this);
P1.add(B8);B8.addActionListener(this);
P1.add(B9);B9.addActionListener(this);
P1.add(B0);B0.addActionListener(this);
P1.add(Ba);Ba.addActionListener(this);
P1.add(Bm);Bm.addActionListener(this);
P1.add(Bmul);Bmul.addActionListener(this);
P1.add(Bdiv);Bdiv.addActionListener(this);
P1.add(Be);Be.addActionListener(this);
P1.add(Bcle);Bcle.addActionListener(this);
F1.add(T1,BorderLayout.NORTH);
F1.setBounds(300,300,260,200);
F1.add(P1);
F1.setVisible(true);
}

public void Shownum(int i){
 String s = null;
 s=String.valueOf(i);
  if(end){
T1.setText("0");
end=false;
}
if((T1.getText()).equals("0")){
T1.setText(s);
}
 else{
str = T1.getText() + s;
T1.setText(str);
 }
}
public void actionPerformed(ActionEvent a){
if(a.getSource()==B1)
Shownum(1);
if(a.getSource()==B2)
Shownum(2);
if(a.getSource()==B3)
Shownum(3);
if(a.getSource()==B4)
Shownum(4);
if(a.getSource()==B5)
Shownum(5);
if(a.getSource()==B6)
Shownum(6);
if(a.getSource()==B7)
Shownum(7);
if(a.getSource()==B8)
Shownum(8);
if(a.getSource()==B9)
Shownum(9);
if(a.getSource()==B0)
Shownum(0);
if(a.getSource()==Bcle)
T1.setText("");
if(a.getSource()==Ba)
T1.setText("+");
if(a.getSource()==Bm)
T1.setText("-");
if(a.getSource()==Bmul)
T1.setText("*");
if(a.getSource()==Bdiv)
T1.setText("/");
}
public static void main(String[] args){
Calculator W=new Calculator();
W.WeaveWindows();
}
}

解决方案 »

  1.   


    if(a.getSource()==B1)
    Shownum(1);
    if(a.getSource()==B2)
    Shownum(2);
    if(a.getSource()==B3)
    Shownum(3);
    if(a.getSource()==B4)
    Shownum(4);
    if(a.getSource()==B5)
    Shownum(5);
    if(a.getSource()==B6)
    Shownum(6);
    if(a.getSource()==B7)
    Shownum(7);
    if(a.getSource()==B8)
    Shownum(8);
    if(a.getSource()==B9)
    Shownum(9);
    if(a.getSource()==B0)
    Shownum(0);
    这些可以简化一下,值就是按钮的文字,就是不是哪个按钮,把它的文字拿出来转成数字就OK按钮的也一样,但要写在另一个侦听里.运算.则是点在运算符号之前,把显示的数拿出来,如果之前已经有数了,就用拿符号出来,开始运算,显示结果.保存数据
      

  2.   

    Button btn = a.getSource();
    showNum(Integer.parseInt(btn.getText());
      

  3.   

    if(a.getSource()==B1)
    Shownum(1);
    if(a.getSource()==B2)
    Shownum(2);
    if(a.getSource()==B3)
    Shownum(3);
    if(a.getSource()==B4)
    Shownum(4);
    if(a.getSource()==B5)
    Shownum(5);
    if(a.getSource()==B6)
    Shownum(6);
    if(a.getSource()==B7)
    Shownum(7);
    if(a.getSource()==B8)
    Shownum(8);
    if(a.getSource()==B9)
    Shownum(9);
    if(a.getSource()==B0)
    Shownum(0);
    if(a.getSource()==Bcle)
    T1.setText("");
    if(a.getSource()==Ba)
    T1.setText("+");
    if(a.getSource()==Bm)
    T1.setText("-");
    if(a.getSource()==Bmul)
    T1.setText("*");
    if(a.getSource()==Bdiv)
    T1.setText("/");这代码是纯粹的面向过程代码,没有丝毫的可扩展性!建议:每种运算写一个类。运算一般有一元运算符(比如开根号等)和二元运算(四则运算等)一元运算符接口:
    public interface UnitaryOperator {
        public double eval(double value);
    }二元运算符接口:
    public interface BinaryOperator {
        public double eval(double a, double b);
    }假如乘法:
    public class MultiplicationOperator {
        public double eval(double a, double b) {
            return a * b;
        }
    }之后怎么组合进代码中去,留给你自己思考吧。
      

  4.   

    public class MultiplicationOperator {改为:public class MultiplicationOperator implements BinaryOperator {