import java.awt.*;
import java.awt.event.*;
public class Calculator extends Frame implements ActionListener{
Button[] btn=new Button[10];
Button btn_add=new Button("+");
Button btn_sub=new Button("-");
Button btn_mul=new Button("*");
Button btn_div=new Button("÷");
Button btn_c=new Button("clear");
Button btn_equ=new Button("=");
TextField ta=new TextField(10);
Panel p=new Panel();
static char c;
String s;
double a,b;
int n=0; //统计运算符个数
int i=0; // 1为+;2为-;3为*;4为/
public Calculator()
{
super("我的计算器");
this.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e)
{
dispose();System.exit(0);
}
});
for(int i=0;i<10;i++)
{
btn[i]=new Button(""+i);btn[i].addActionListener(this);
}
btn_add.addActionListener(this);
btn_sub.addActionListener(this);
btn_mul.addActionListener(this);
btn_div.addActionListener(this);
btn_c.addActionListener(this);
btn_equ.addActionListener(this);
p.setLayout(new GridLayout(4,4));
p.add(btn[1]);p.add(btn[2]);p.add(btn[3]);p.add(btn_add);
p.add(btn[4]);p.add(btn[5]);p.add(btn[6]);p.add(btn_sub);
p.add(btn[7]);p.add(btn[8]);p.add(btn[9]);p.add(btn_mul);
p.add(btn[0]);p.add(btn_div);p.add(btn_c);p.add(btn_equ);
this.setLayout(new BorderLayout(10,10));
this.add(ta,"North");
this.add(p,"Center");
this.pack();
this.setVisible(true);
}
public void actionPerformed(ActionEvent e) {
if(e.getSource()==btn[0]) s=s+"0";
if(e.getSource()==btn[1]) s=s+"1";
if(e.getSource()==btn[2]) s=s+"2";
if(e.getSource()==btn[3]) s=s+"3";
if(e.getSource()==btn[4]) s=s+"4";
if(e.getSource()==btn[5]) s=s+"5";
if(e.getSource()==btn[6]) s=s+"6";
if(e.getSource()==btn[7]) s=s+7;
if(e.getSource()==btn[8]) s=s+8;
if(e.getSource()==btn[9]) s=s+9;
if(s=="") ta.setText("");
else ta.setText(s);
a=Double.parseDouble(s);
if(n<1) b=a;
if(e.getSource()==btn_add)
{
c='+';
s="";
n=n+1;
if(n>1)
{
switch(i)
{
case 1: b=b+a;break;
case 2: b=b-a;break;
case 3: b=b*a;break;
case 4: b=b/a;break; }
}
i=1;
}
if(e.getSource()==btn_sub)
{
c='-';
s="";
n=n+1;
if(n>1)
{
switch(i)
{
case 1: b=b+a;break;
case 2: b=b-a;break;
case 3: b=b*a;break;
case 4: b=b/a;break; }
}
i=2;
}
if(e.getSource()==btn_mul)
{
c='*';
s="";
n=n+1;
if(n>1)
{
switch(i)
{
case 1: b=b+a;break;
case 2: b=b-a;break;
case 3: b=b*a;break;
case 4: b=b/a;break; }
}
i=3;
}
if(e.getSource()==btn_div)
{
c='/';
s="";
n=n+1;
if(n>1)
{
switch(i)
{
case 1: b=b+a;break;
case 2: b=b-a;break;
case 3: b=b*a;break;
case 4: b=b/a;break; }
}
i=4;
}
if(e.getSource()==btn_equ)
{
switch(i)
{
case 1: b=b+a;break;
case 2: b=b+a;break;
case 3: b=b+a;break;
case 4: b=b+a;break;
}
ta.setText(Double.toString(b));
}
if(e.getSource()==btn_c) {ta.setText("");s="";b=0;n=0;i=0;};
} public static void main(String[] args) {
Calculator ca=new Calculator();
}
}
大家帮忙看下,是哪错了还是不可以用这种方法实现?
对编写计算器还有很多不明白的地方,希望给点意见
谢谢
import java.awt.event.*;
public class Calculator extends Frame implements ActionListener{
Button[] btn=new Button[10];
Button btn_add=new Button("+");
Button btn_sub=new Button("-");
Button btn_mul=new Button("*");
Button btn_div=new Button("÷");
Button btn_c=new Button("clear");
Button btn_equ=new Button("=");
TextField ta=new TextField(10);
Panel p=new Panel();
static char c;
String s;
double a,b;
int n=0; //统计运算符个数
int i=0; // 1为+;2为-;3为*;4为/
public Calculator()
{
super("我的计算器");
this.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e)
{
dispose();System.exit(0);
}
});
for(int i=0;i<10;i++)
{
btn[i]=new Button(""+i);btn[i].addActionListener(this);
}
btn_add.addActionListener(this);
btn_sub.addActionListener(this);
btn_mul.addActionListener(this);
btn_div.addActionListener(this);
btn_c.addActionListener(this);
btn_equ.addActionListener(this);
p.setLayout(new GridLayout(4,4));
p.add(btn[1]);p.add(btn[2]);p.add(btn[3]);p.add(btn_add);
p.add(btn[4]);p.add(btn[5]);p.add(btn[6]);p.add(btn_sub);
p.add(btn[7]);p.add(btn[8]);p.add(btn[9]);p.add(btn_mul);
p.add(btn[0]);p.add(btn_div);p.add(btn_c);p.add(btn_equ);
this.setLayout(new BorderLayout(10,10));
this.add(ta,"North");
this.add(p,"Center");
this.pack();
this.setVisible(true);
}
public void actionPerformed(ActionEvent e) {
if(e.getSource()==btn[0]) s=s+"0";
if(e.getSource()==btn[1]) s=s+"1";
if(e.getSource()==btn[2]) s=s+"2";
if(e.getSource()==btn[3]) s=s+"3";
if(e.getSource()==btn[4]) s=s+"4";
if(e.getSource()==btn[5]) s=s+"5";
if(e.getSource()==btn[6]) s=s+"6";
if(e.getSource()==btn[7]) s=s+7;
if(e.getSource()==btn[8]) s=s+8;
if(e.getSource()==btn[9]) s=s+9;
if(s=="") ta.setText("");
else ta.setText(s);
a=Double.parseDouble(s);
if(n<1) b=a;
if(e.getSource()==btn_add)
{
c='+';
s="";
n=n+1;
if(n>1)
{
switch(i)
{
case 1: b=b+a;break;
case 2: b=b-a;break;
case 3: b=b*a;break;
case 4: b=b/a;break; }
}
i=1;
}
if(e.getSource()==btn_sub)
{
c='-';
s="";
n=n+1;
if(n>1)
{
switch(i)
{
case 1: b=b+a;break;
case 2: b=b-a;break;
case 3: b=b*a;break;
case 4: b=b/a;break; }
}
i=2;
}
if(e.getSource()==btn_mul)
{
c='*';
s="";
n=n+1;
if(n>1)
{
switch(i)
{
case 1: b=b+a;break;
case 2: b=b-a;break;
case 3: b=b*a;break;
case 4: b=b/a;break; }
}
i=3;
}
if(e.getSource()==btn_div)
{
c='/';
s="";
n=n+1;
if(n>1)
{
switch(i)
{
case 1: b=b+a;break;
case 2: b=b-a;break;
case 3: b=b*a;break;
case 4: b=b/a;break; }
}
i=4;
}
if(e.getSource()==btn_equ)
{
switch(i)
{
case 1: b=b+a;break;
case 2: b=b+a;break;
case 3: b=b+a;break;
case 4: b=b+a;break;
}
ta.setText(Double.toString(b));
}
if(e.getSource()==btn_c) {ta.setText("");s="";b=0;n=0;i=0;};
} public static void main(String[] args) {
Calculator ca=new Calculator();
}
}
大家帮忙看下,是哪错了还是不可以用这种方法实现?
对编写计算器还有很多不明白的地方,希望给点意见
谢谢
第二,我测试了下,逻辑有问题,具体的逻辑自己看吧,如果需要,我可以提供个以前自己写的给你参考
import java.awt.event.*;
public class Calculator extends WindowAdapter implements ActionListener {
private double result=0,data1=0,radixPointDepth=1;
private boolean radixPointIndicate=false,resultIndicate=false;
private char prec='+';
private Frame f;
private TextField tf;
private Button b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12,b13,b14,b15,b16,b17;
private Panel p;
private static String a="";
static public void main(String args[]) {
Calculator de=new Calculator();
de.go();
}
public void go() {
f=new Frame("傻瓜计算器");
p=new Panel();
p.setLayout(new GridLayout(4,4));
tf=new TextField(30);
b1=new Button("7");
b2=new Button("8");
b3=new Button("9");
b4=new Button("+");
b5=new Button("4");
b6=new Button("5");
b7=new Button("6");
b8=new Button("-");
b9=new Button("1");
b10=new Button("2");
b11=new Button("3");
b12=new Button("*");
b13=new Button("0");
b14=new Button(".");
b15=new Button("=");
b16=new Button("/");
b17=new Button("清零");
f.add(tf,"North");
f.add(p,"Center");
f.add(b17,"South");
p.add(b1);
p.add(b2);
p.add(b3);
p.add(b4);
p.add(b5);
p.add(b6);
p.add(b7);
p.add(b8);
p.add(b9);
p.add(b10);
p.add(b11);
p.add(b12);
p.add(b13);
p.add(b14);
p.add(b15);
p.add(b16);
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);
b10.addActionListener(this);
b11.addActionListener(this);
b12.addActionListener(this);
b13.addActionListener(this);
b14.addActionListener(this);
b15.addActionListener(this);
b16.addActionListener(this);
b17.addActionListener(this);
f.addWindowListener(this);
f.setSize(250,190);
f.setVisible(true);
}
public void actionPerformed(ActionEvent e) {
String s;
s=e.getActionCommand();
switch(s.charAt(0)) {
case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9':
if(resultIndicate) {
result=0;
data1=0;
prec='+';
}
Integer Int1=new Integer(s);
if(radixPointIndicate) {
radixPointDepth=radixPointDepth/10;
data1=data1+(Int1.intValue())*radixPointDepth;
} else {
data1=data1*10+(Int1.intValue());
}
Double displayNumber=new Double(data1);
tf.setText(a+displayNumber.toString());
resultIndicate=false;
break;
case '+': case '-':case '*':case '/':case '=':
if(s.charAt(0)!='='&&resultIndicate) { //不是等于而且真
prec=s.charAt(0);
resultIndicate=false;
} else {
switch(prec) {
case '+':
result=result+data1;
break;
case '-':
result=result-data1;
break;
case '*':
result=result*data1;
break;
case '/':
result=result/data1;
break;
}
}
radixPointIndicate=false;
radixPointDepth=1;
displayNumber=new Double(result);
a=new String(displayNumber.toString()+s.charAt(0));
if(s.charAt(0)=='='){
tf.setText(displayNumber.toString());
}else{
tf.setText(a);
}
if(s.charAt(0)!='=') { //不是等于
data1=0;
prec=s.charAt(0);
} else {
resultIndicate=true;
}
break;
case '.':
radixPointIndicate=true;
break;
}
if(s.equals("清零")) {
result=0;
data1=0;
radixPointDepth=1;
tf.setText("");
a="";
}
}
public void windowClosing(WindowEvent e) {
System.exit(0);
}
}