您的位置:首页 > 编程语言 > Java开发

Java 计算器实现

2012-12-14 16:33 323 查看
1、加减乘除操作

public class MyMath {
public static final int DEFAULT_SCALE = 20;

public static double add(double num1, double num2) {

BigDecimal first = getBigDecimal(num1);
BigDecimal second = getBigDecimal(num2);
return first.add(second).doubleValue();
}

public static double substract(double num1, double num2) {

BigDecimal first = getBigDecimal(num1);
BigDecimal second = getBigDecimal(num2);
return first.subtract(second).doubleValue();
}

public static double multiply(double num1, double num2) {

BigDecimal first = getBigDecimal(num1);
BigDecimal second = getBigDecimal(num2);
return first.multiply(second).doubleValue();
}

public static double divide(double num1, double num2) {

BigDecimal first = getBigDecimal(num1);
BigDecimal second = getBigDecimal(num2);
return first.divide(second,DEFAULT_SCALE, BigDecimal.ROUND_HALF_UP).doubleValue();
}

private static BigDecimal getBigDecimal(double num)
{
return new BigDecimal(num);
}

}


 

2、UI

public class CalFrame extends JFrame {

/**
*
*/
private static final long serialVersionUID = 1L;
private TextField textField;
private final int Frame_Width = 360;
private final int Frame_Height = 250;
private CalService service = new CalService();

private String[] mOpStrings = {"MC","MR","MS","M+"};
private String[] nOp = { "7", "8", "9", "/", "sqrt", "4", "5", "6", "*",
"%", "1", "2", "3", "-", "1/x", "0", "+/-", ".", "+", "=" };
private String[] rOp = { "Back", "CE", "C" };

public CalFrame(){
super();
initialize();
}

private  void initialize() {
this.setTitle("我的计算器");
this.setResizable(false);
JPanel panel = new JPanel();

textField = new TextField("0");
textField.setBackground(Color.white);
textField.setEditable(false);

panel.setLayout(new BorderLayout(10, 1));
panel.add(textField, BorderLayout.NORTH);

panel.setPreferredSize(new DimensionUIResource(Frame_Width, Frame_Height));

JPanel panel1 = new JPanel();
panel1.setLayout(new GridLayout(5, 1, 0, 5));
JButton[] mButton = new JButton[mOpStrings.length];
for (int i = 0; i < this.mOpStrings.length; i++) {
JButton b = new JButton(this.mOpStrings[i]);
b.addActionListener(new ActionListener() {

@Override
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
String cmdString = arg0.getActionCommand();
String result = null;

try {
result = service.callMethod(cmdString, textField.getText());
} catch (Exception e) {
// TODO: handle exception
System.out.println(e.getMessage());
}

if (cmdString.indexOf("MC") == 0) {

}

if (result != null) {
textField.setText(result);
}

}
});
b.setBackground(Color.red);
mButton[i] = b;
}

for (JButton b : mButton) {
panel1.add(b);
}

/////////////////////////////////////////////////////////
Panel panel2 = new Panel();
panel2.setLayout(new BorderLayout(1,5));

Panel panel21 = new Panel();
JButton[] result = new JButton[rOp.length];
for (int i = 0; i < this.rOp.length; i++) {
JButton b = new JButton(this.rOp[i]);
b.addActionListener(new ActionListener() {

@Override
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub

}
});
b.setBackground(Color.red);
result[i] = b;
}

panel21.setLayout(new GridLayout(1,3,3,3));
for (JButton button : result) {
panel21.add(button);
}

Panel panel22 = new Panel();
panel22.setLayout(new GridLayout(4,5,3,5));
JButton[] result2 = new JButton[nOp.length];
String[] redButton = { "/", "*", "-", "+", "=" };
for (int i = 0; i < this.nOp.length; i++) {
JButton b2 = new JButton(this.nOp[i]);
b2.addActionListener(new ActionListener() {

@Override
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub

}
});

Arrays.sort(redButton);
if (Arrays.binarySearch(redButton, nOp[i]) >= 0) {
b2.setForeground(Color.red);
}
else {
b2.setForeground(Color.blue);
}
result2[i] = b2;
}
for (JButton button : result2) {
panel22.add(button);
}

panel2.add(panel21, BorderLayout.NORTH);
panel2.add(panel22,BorderLayout.CENTER);

panel.add(panel1, BorderLayout.WEST);
panel.add(panel2, BorderLayout.CENTER);

this.add(panel);
}
}


  

3、业务类

public class CalService {
private String firstNum = null;
private String secondNum = null;
private String numString = "0123456789.";
private String opString = "+-*/";

public String callMethod(String cmd, String text)throws Exception  {
if (cmd.equals("C")) {
return clearAll();
}else if (cmd.equals("CE")) {
return clear(text);
} else if (cmd.equals("Back")) {
return backSpace(text);
} else if (numString.indexOf(cmd) != -1) {
return catNum(cmd, text);
} else if (opString.indexOf(cmd) != -1) {
return setOp(cmd, text);
} else if (cmd.equals("=")) {
return cal(text, false);
} else if (cmd.equals("+/-")) {
return setNegative(text);
} else if (cmd.equals("1/x")) {
return setReciprocal(text);
} else if (cmd.equals("sqrt")) {
return sqrt(text);
} else if (cmd.equals("%")) {
return cal(text, true);
} else {
return mCmd(cmd, text);
}
}

private String backSpace(String text) {
// TODO Auto-generated method stub
return null;
}

private String catNum(String cmd, String text) {
// TODO Auto-generated method stub
return null;
}

private String setOp(String cmd, String text) {
// TODO Auto-generated method stub
return null;
}

private String setNegative(String text) {
// TODO Auto-generated method stub
return null;
}

private String setReciprocal(String text) {
// TODO Auto-generated method stub
return null;
}

private String sqrt(String text) {
// TODO Auto-generated method stub
return null;
}

private String cal(String text, boolean b) {
// TODO Auto-generated method stub
return null;
}

private String mCmd(String cmd, String text) {
// TODO Auto-generated method stub
return null;
}

private String clear(String text) {
// TODO Auto-generated method stub
return null;
}

private String clearAll() {
// TODO Auto-generated method stub
this.firstNum = "0";
this.secondNum = null;
return this.firstNum;
}
}


  

4、Main类

public static void main(String[] args) {
// TODO Auto-generated method stub

CalFrame frame = new CalFrame();
frame.pack();
frame.setVisible(true);
frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE);
}


 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: