import java.util.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.applet.*;
public class Demo03 extends JApplet implements ActionListener {
boolean i = true;
private JButton num0 = new JButton("0");
private JButton num1 = new JButton("1");
private JButton num2 = new JButton("2");
private JButton num3 = new JButton("3");
private JButton num4 = new JButton("4");
private JButton num5 = new JButton("5");
private JButton num6 = new JButton("6");
private JButton num7 = new JButton("7");
private JButton num8 = new JButton("8");
private JButton num9 = new JButton("9");
private JButton zuok = new JButton("(");
private JButton youk = new JButton(")");
private JButton dian = new JButton(".");
private JButton NULL = new JButton("N");
private JButton plu = new JButton("+");
private JButton min = new JButton("-");
private JButton mul = new JButton("x");
private JButton div = new JButton("/");
private JButton equ = new JButton("=");
private JButton cle = new JButton("C");// 清除
private JTextField space = new JTextField(15);
public void init() {
JPanel text = new JPanel();
text.setLayout(new FlowLayout());
text.add(space);
JPanel buttons = new JPanel();
buttons.setLayout(new GridLayout(5, 4));
buttons.add(num9);
buttons.add(num8);
buttons.add(num7);
buttons.add(plu);
buttons.add(num6);
buttons.add(num5);
buttons.add(num4);
buttons.add(min);
buttons.add(num3);
buttons.add(num2);
buttons.add(num1);
buttons.add(mul);
buttons.add(num0);
buttons.add(cle);
buttons.add(equ);
buttons.add(div);
(num9).addActionListener(this);
(num8).addActionListener(this);
(num7).addActionListener(this);
(num6).addActionListener(this);
(num5).addActionListener(this);
(num4).addActionListener(this);
(num3).addActionListener(this);
(num2).addActionListener(this);
(num1).addActionListener(this);
(num0).addActionListener(this);
(plu).addActionListener(this);
(min).addActionListener(this);
(mul).addActionListener(this);
(div).addActionListener(this);
(equ).addActionListener(this);
(cle).addActionListener(this);
setLayout(new BorderLayout());
add("North", text);
add("South", buttons);
space.setText("0");
}
public void actionPerformed(ActionEvent e) {
if (e.getSource() == num9) {
if (i == true) {
space.setText("9");
i = false;
} else
space.setText(space.getText() + '9');
}
if (e.getSource() == num8) {
if (i == true) {
space.setText("8");
i = false;
} else
space.setText(space.getText() + '8');
}
if (e.getSource() == num7) {
if (i == true) {
space.setText("7");
i = false;
} else
space.setText(space.getText() + '7');
}
if (e.getSource() == num6) {
if (i == true) {
space.setText("6");
i = false;
} else
space.setText(space.getText() + '6');
}
if (e.getSource() == num5) {
if (i == true) {
space.setText("5");
i = false;
} else
space.setText(space.getText() + '5');
}
if (e.getSource() == num4) {
if (i == true) {
space.setText("4");
i = false;
} else
space.setText(space.getText() + '4');
}
if (e.getSource() == num3) {
if (i == true) {
space.setText("3");
i = false;
} else
space.setText(space.getText() + '3');
}
if (e.getSource() == num2) {
if (i == true) {
space.setText("2");
i = false;
} else
space.setText(space.getText() + '2');
}
if (e.getSource() == num1) {
if (i == true) {
space.setText("1");
i = false;
} else
space.setText(space.getText() + '1');
}
if (e.getSource() == num0) {
if (i == true) {
space.setText("0");
i = false;
} else
space.setText(space.getText() + '0');
}
if (e.getSource() == plu) {
space.setText(space.getText() + '+');
i = false;
}
if (e.getSource() == min) {
space.setText(space.getText() + '-');
i = false;
}
if (e.getSource() == mul) {
space.setText(space.getText() + '*');
i = false;
}
if (e.getSource() == div) {
space.setText(space.getText() + '/');
i = false;
}
if (e.getSource() == equ) {
space.setText(String.valueOf(Calculator(space.getText())));
i = true;
}
if (e.getSource() == cle) {
space.setText("0");
i = true;
}
}
public double Calculator(String f)// 科学计算
{
int i = 0, j = 0, k;
char c;
StringBuffer s = new StringBuffer();
s.append(f);
s.append('=');
String formula = s.toString();
char[] anArray;
anArray = new char[50];
Stackmystack = new Stack ();
while (formula.charAt(i) != '=') {
c = formula.charAt(i);
switch (c) {
case '+':
case '-':
while (!mystack.empty() && mystack.peek().charValue() != '(') {
anArray[j++] = mystack.pop().charValue();
}
mystack.push(new Character(c));
i++;
break;
case '*':
case '/':
while (!mystack.empty()
&& (mystack.peek().charValue() == '*' || mystack.peek()
.charValue() == '/')) {
anArray[j++] = mystack.pop().charValue();
}
mystack.push(new Character(c));
i++;
break;
case ' ':
i++;
break;
default:
while ((c >= '0' && c <= '9') || c == '.') {
anArray[j++] = c;
i++;
c = formula.charAt(i);
}
anArray[j++] = '#';
break;
}
}
while (!(mystack.empty()))
anArray[j++] = mystack.pop().charValue();
i = 0;
int count;
double a, b, d;
Stackmystack1 = new Stack ();
while (i < j) {
c = anArray[i];
switch (c) {
case '+':
a = mystack1.pop().doubleValue();
b = mystack1.pop().doubleValue();
d = b + a;
mystack1.push(new Double(d));
i++;
break;
case '-':
a = mystack1.pop().doubleValue();
b = mystack1.pop().doubleValue();
d = b - a;
mystack1.push(new Double(d));
i++;
break;
case '*':
a = mystack1.pop().doubleValue();
b = mystack1.pop().doubleValue();
d = b * a;
mystack1.push(new Double(d));
i++;
break;
case '/':
a = mystack1.pop().doubleValue();
b = mystack1.pop().doubleValue();
if (a != 0) {
d = b / a;
mystack1.push(new Double(d));
i++;
} else {
System.out.println("Error!");
}
break;
default:
d = 0;
count = 0;
while ((c >= '0' && c <= '9')) {
d = 10 * d + c - '0';
i++;
c = anArray[i];
}
if (c == '.') {
i++;
c = anArray[i];
while ((c >= '0' && c <= '9')) {
count++;
d = d + (c - '0') / Math.pow(10, count);
i++;
c = anArray[i];
}
}
if (c == '#')
mystack1.push(new Double(d));
i++;
break;
}
}
return (mystack1.peek().doubleValue());
}
}
你看看这个合适不?