编写的计算器程序 小数点处理出了点问题 大侠帮忙改下
剑 云 2006-11-26 12:34:49 import java.awt.*;
import java.awt.event.*;
public class calculator implements ActionListener,WindowListener {
private Frame f; //计算器窗口容器
private TextField result; //文本框。
private float Num1, Num2, NumR; //Num1用于保存第一个值,Num2用于保存第二个值, NumR保存结果的值。
private char sign; //sign用于保存运算符号。
public static void main(String args[]) { //主函数main。
calculator cal = new calculator();
cal.go();
}
void go() { //go()方法,用于启动计算器。
f = new Frame();
f.setLayout(new BorderLayout(5,5));
result = new TextField("0", 20);
result.setEditable(false);
f.add(result, "North");
Panel p = new Panel();
Panel p2 =new Panel();
p.setLayout(new FlowLayout(FlowLayout.RIGHT,5,5));
p.add(mybutton("C"));
p.add(mybutton("="));
p2.setLayout(new GridLayout(5,4,4,5));
p2.add(mybutton("7"));
p2.add(mybutton("8"));
p2.add(mybutton("9"));
p2.add(mybutton("*"));
p2.add(mybutton("4"));
p2.add(mybutton("5"));
p2.add(mybutton("6"));
p2.add(mybutton("/"));
p2.add(mybutton("1"));
p2.add(mybutton("2"));
p2.add(mybutton("3"));
p2.add(mybutton("+"));
p2.add(mybutton("0"));
p2.add(mybutton("+/-"));
p2.add(mybutton("."));
p2.add(mybutton("-"));
f.add(p,"Center");
f.add(p2, "South");
f.addWindowListener(this); //给窗体加上一个关闭事件
f.setSize(180,220);
f.setResizable(false); //自由调节窗体大小为false。
f.setVisible(true);
}
public Button mybutton(String s) { //动态建立一个按钮和动态加入事件。
Button TempButton=new Button(s);
TempButton.addActionListener(this); //加入行动事件
return TempButton;
}
public void actionPerformed(ActionEvent e) {
String input = e.getActionCommand();
String str = "0123456789.";
String op = "+-*/";
if (str.indexOf(input) >= 0 ) { //当单击的按钮是数字按钮时进行下面处理
if (result.getText().equals("0")) //如果显示值中已经是0,如果再次输入的是零,则不处理。
result.setText(input);
else {
if (NumR == 0) //判定留在文本框中的值不为运算结果值。
result.setText(result.getText().trim() + input);
else {
NumR = 0;
result.setText("" + input);
}
}
}
else if (op.indexOf(input) >= 0) { //当单击的按钮是运算符按钮时进行下面处理。
Num1 = Float.parseFloat(result.getText().trim());
result.setText("");
sign = op.charAt(op.indexOf(input)); //得到相应的运算符
//op.charAt(n)返回在op字符串中的第n个位置的值。
//op.indexOf(input)返回字符input在op中出现的位置,位置值为整型,并且值从0开始
}
else if (input.equals("=")) { //当单击的按钮是是=号时,进行运算。
Num2 = Float.parseFloat(result.getText().trim());
switch (sign) {
case '+': {
NumR = Num1 + Num2;
result.setText("" + NumR);
break;
}
case '-': {
NumR = Num1 - Num2;
result.setText("" + NumR);
break;
}
case '*': {
NumR = Num1 * Num2;
result.setText("" + NumR);
break;
}
case '/': {
if (Num2 != 0) { //当Num2不等于0的时候,才进行运算。
NumR = Num1 / Num2;
result.setText("" + NumR);
}
else
result.setText("Error");
break;
}
default:;
}
}
else if (input.equals("+/-"))
{
boolean isNumber = true;
String s = result.getText();
for (int i = 0; i < s.length(); i++)
if (! (s.charAt(i) >= '0' && s.charAt(i) <= '9' || s.charAt(i) == '.' ||
s.charAt(i) == '-'))
{
isNumber = false;
break;
}
if (isNumber == true)
{
//判断输入的数的符号 +.
if (s.charAt(0) == '-')
{
result.setText("");
for (int i = 1; i < s.length(); i++)
{
char a = s.charAt(i);
result.setText(result.getText() + a);
}
}
//
else
result.setText('-' + s);
}
}
if (input.equals("C")) { //当单击的按钮是C号时,初始化计算器。
Num1 = 0;
Num2 = 0;
NumR = 0;
sign = ' ';
result.setText("0");
}
}
public void windowClosing(WindowEvent e) { System.exit(-1); }
public void windowIconified(WindowEvent e) {}
public void windowDeiconified(WindowEvent e) {}
public void windowClosed(WindowEvent e) {}
public void windowOpened(WindowEvent e) {}
public void windowActivated(WindowEvent e) {}
public void windowDeactivated(WindowEvent e) {}
}