日期:2014-05-20  浏览次数:20711 次

大家看看这个计算器的代码写的合理吗
这是老师给我的一个计算器的代码,我觉得算法部分很不合理,但是又不知道怎么写,请大家帮我解决一下。
package com;


import java.awt.BorderLayout;
import java.awt.GridLayout;

import javax.swing.*;
import java.awt.event.*;

public class Calculator extends JFrame implements ActionListener{
/**

*/
private static final long serialVersionUID = 1L;
// 声明一个文本栏控件,用于显示计算结果
private JTextField txtResult;

private JPanel p;
// 定义一个字符串数组,将计算器中按钮的文字都放在该数组中
private String name[] = { "7", "8", "9", "+", "4", "5", "6", "-", "1", "2",
"3", "*", "0", ".", "=", "/" };
// 声明一个按钮数组,该数组的长度以字符串数组的长度为准
private JButton button[] = new JButton[name.length];
// 定义一个存放计算结果的变量,初始为0
private double result = 0;
// 存放最后一个操作符,初始为“=”
private String lastCommand = "=";
// 标识是否是开始
private boolean start = true;

public Calculator() {
super("计算器");
// 实例化文本栏控件
txtResult = new JTextField(20);
  //设置文本框不是焦点状态
txtResult.setFocusable(false);
// 将文本栏控件放置在窗体框架的上方(北部)
this.add(txtResult, BorderLayout.NORTH);
// 实例化面板对象,同时设置此面板布局为4行4列的网格布局
p = new JPanel(new GridLayout(4, 4));
// 循环实例化按钮对象数组
// 实例化按钮监听对象
// 实例化键盘监听对象
for (int i = 0; i < button.length; i++) {
button[i] = new JButton(name[i]);
// 注册监听
button[i].addActionListener(this);
p.add(button[i]);
}
this.add(p, BorderLayout.CENTER);
this.setSize(200, 150);
this.setLocation(100, 100);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}

// 计算
public void calculate(double x) {
if (lastCommand.equals("+"))
result += x;
else if (lastCommand.equals("-"))
result -= x;
else if (lastCommand.equals("*"))
result *= x;
else if (lastCommand.equals("/"))
result /= x;
else if (lastCommand.equals("="))
result = x;
// 将结果显示在文本栏
txtResult.setText("" + result);
}

@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
String input = e.getActionCommand();
// 点击操作符号按钮
if (input.equals("+") || input.equals("-") || input.equals("*")
|| input.equals("/") || input.equals("=")) {
if (start) {
if (input.equals("-")) {
txtResult.setText(input);
start = false;
} else
lastCommand = input;
} else {
calculate(Double.parseDouble(txtResult.getText()));
lastCommand = input;
start = true;
}
} else {
if (start) {
txtResult.setText("");
start = false;
}
txtResult.setText(txtResult.getText()+ input);
}
}
public static void main(String[] args) {
Calculator f = new Calculator();
f.setVisible(true);
}
}


------解决方案--------------------
关于小数点,你可以验证一下,如果已经输入了小数点,就不能再输入了。加个标志位或者用正则表达式匹配一下。

其他的挺好的~不错!
------解决方案--------------------
还蛮好的。 我还写不出来这样的。但是 感觉人机友好不够。