在实际开发中,计算器是一种很常见的工具,我们可以利用计算器进行各种数学计算。而如今,计算器的实现并不仅仅停留在传统的硬件层面,相对而言,装载计算器程序的手机、电脑等以软件形式出现的计算器,才是人们平日中最为常用的计算器形式。
那么,在这篇文章中,我们将详细解释一下如何在Java中实现一个计算器程序,并附上源代码。在实现这个程序中,我们将从实现原理到实现过程的角度来进行讲解。
一、实现原理
在进行计算机程序的开发时,我们不仅需要实现负责数学计算的内核,同时还需要提供简单的操作界面供用户进行计算器的操作。
当用户输入一个数学表达式时,计算器应该首先将这个表达式转化为程序可以处理的形式,也就是包含运算符、数字和括号的字符串。之后,计算器程序会在运算过程中遍历这个字符串,并在遇到运算符时,对它们进行不同的运算。
最后,程序应该将运算的结果输出给用户。
二、实现过程
1.设计UI界面
我们首先需要设计一个用户界面。对于计算器应用程序而言,界面应该包含数字键和运算符,甚至可能还会包括其他一些复杂的科学计算功能。为了简单化,这里我们只实现了基本的加、减、乘、除和取反功能。
下面是代码的布局:
```
JFrame frame = new JFrame("Java计算器");
frame.setSize(300, 300);
frame.setLayout(new BorderLayout());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel displayPanel = new JPanel();
displayPanel.setLayout(new BorderLayout());
JLabel displayLabel = new JLabel("0");
displayLabel.setHorizontalAlignment(JLabel.RIGHT);
displayLabel.setFont(new Font("宋体", Font.PLAIN, 18));
displayPanel.add(displayLabel, BorderLayout.CENTER);
frame.add(displayPanel, BorderLayout.NORTH);
```
2.实现业务逻辑
接下来,我们需要实现计算器的业务逻辑。为了简化代码,我们将业务逻辑单独封装成一个Calculator类。下面是代码:
```
public class Calculator {
private String lastOperator = "+";
private double result = 0;
private boolean isNew = true;//输入的是否是新的一轮操作
public void reset() {
lastOperator = "+";
result = 0;
isNew = true;
}
public double getResult() {
return result;
}
public void input(String str) {
if (isNew) {
isNew = false;
result = Double.parseDouble(str);
return;
}
char op = str.charAt(0);
double inputNum = Double.parseDouble(str.substring(1));
switch (op) {
case '+':
result = result + inputNum;
break;
case '-':
result = result - inputNum;
break;
case '*':
result = result * inputNum;
break;
case '/':
if (inputNum == 0) {
result = 0;
} else {
result = result / inputNum;
}
break;
case 'c'://清空
result = 0;
break;
case '='://等于
isNew = true;
break;
case 's'://取反
result = -result;
isNew = true;
break;
case '.'://小数点
String sResult = Double.toString(result);
if (sResult.indexOf(".") < 0) {
sResult += ".";
}
result = Double.parseDouble(sResult);
isNew = false;
break;
}
lastOperator = op + "";
}
public void inputOperator(String op) {
String input = lastOperator;
if (isNew) {
input = input + "0";
}
input = input + op;
input(input);
}
}
```
在Calculator类中,我们定义了变量lastOperator、result、isNew,这些变量将被用于处理用户的数学输入,从而生成计算结果。reset方法用来清空计算器中所有的数据。getResult方法用来获取结果。
input方法用于处理用户输入,包括接收用户输入的数值并根据运算符号计算结果。inputOperator方法用于处理用户输入运算符的情况。
在input方法中:
1.通过判断输入是否为第一个数字,以及是否为新的一轮运算,避免了不必要的运算。
2.根据运算符更新结果。
3.根据运算符标记是否为新的一轮。
在inputOperator方法中,我们将运算符输入替换为lastOperator,以及将当前输入处理并传递给input方法。
接下来,我们需要将业务逻辑和UI界面结合起来。
```
public class CalculatorFrame extends JFrame implements ActionListener {
private Calculator calculator = new Calculator();
private JLabel label;
public CalculatorFrame() {
super("Java计算器");
setLocation(500, 300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel buttonPanel = new JPanel();
buttonPanel.setLayout(new GridLayout(4, 4, 4, 4));
String[] buttonLabels = {"7", "8", "9", "/", "4", "5", "6", "*", "1", "2", "3", "-", "0", ".", "c", "+"};
for (String label : buttonLabels) {
JButton btn = new JButton(label);
btn.addActionListener(this);
buttonPanel.add(btn);
}
getContentPane().add(buttonPanel, BorderLayout.CENTER);
label = new JLabel("0", SwingConstants.RIGHT);
add(label, BorderLayout.NORTH);
pack();
}
public void actionPerformed(ActionEvent e) {
String actionCommand = e.getActionCommand();
if (actionCommand.equals("c")) {
calculator.reset();
label.setText("0");
return;
}
calculator.input(actionCommand);
label.setText(String.valueOf(calculator.getResult()));
}
public static void main(String[] args) {
CalculatorFrame frame = new CalculatorFrame();
frame.setVisible(true);
}
}
```
在构造函数中,我们初始化计算器并创建一个面板用于按钮布局。然后我们以顺序方式添加数字和运算符按钮,并为所有按钮附加一个操作监听器。当用户点击按钮时,ClickListener通过发生的事件调用接口中的actionPerformed方法。
在actionPerformed方法中,首先,我们判断用户是否单击了“C”按钮。如果是,则执行计算器重置方法,并在界面中更新当前结果;否则,将从GUI获取的数字传递给计算器,并在界面中更新结果。
三、总结
在它的核心层面,本文所介绍的Java计算器源代码实现利用面向对象程序设计的思想,通过将运算符和数字作为类的方法和属性,将计算器的功能封装。通过将业务逻辑与UI界面结合,使用户能够轻松使用计算器进行计算操作。当然,本程序仅仅实现了基本的加、减、乘、除和取反功能。如果需要添加其他的一些复杂的科学计算,这个程序上还需要加更多的功能实现。