用Java编写简单的计算器
一粟102 2024-07-19 13:35:05 阅读 67
目录
1.思路与分析
2.程序代码及分析
3.总结
1.思路与分析
首先我们需要提供一个面板,一些按钮,一个文本框,它可以实现简单的加,减,乘,除,接着我们可以将这些想法付诸行动。
2.程序代码及分析
<code>package ap1;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.JFrame;
public class Calculator extends JFrame implements ActionListener{
JTextField textField; //定义一个文本框
//定义一些按钮
JButton buttonAdd, buttonSubtract, buttonMultiply, buttonDivide, buttonEquals,buttonPoint,buttonClear;
JPanel panelMain; //定义一个面板
double num1, num2;
char operator;
public Calculator() {
//设置窗口名字,大小
setTitle("简易计算器");
setSize(350, 350);
textField = new JTextField(30);
textField.setEditable(false);
//添加按钮
buttonAdd = new JButton("+");
buttonSubtract = new JButton("-");
buttonMultiply = new JButton("*");
buttonDivide = new JButton("/");
buttonEquals = new JButton("=");
buttonClear = new JButton("清除");
panelMain = new JPanel(new GridLayout(4,5)); //网格式布局,四行五列
panelMain.add(buttonAdd);
panelMain.add(buttonSubtract);
panelMain.add(buttonMultiply);
panelMain.add(buttonDivide);
panelMain.add(buttonEquals);
panelMain.add(buttonClear);
//添加监听
buttonAdd.addActionListener(this);
buttonSubtract.addActionListener(this);
buttonMultiply.addActionListener(this);
buttonDivide.addActionListener(this);
buttonEquals.addActionListener(this);
buttonClear.addActionListener(this);
//添加1到9的按钮
for (int i = 1; i <= 9; i++) {
JButton button = new JButton("" + i);
button.addActionListener(this);
panelMain.add(button);
}
//设置添加0这个特殊的按钮
panelMain.add(new JButton());
JButton button0 = new JButton("0");
button0.addActionListener(this);
panelMain.add(button0);
panelMain.add(new JButton());
Container container = getContentPane();
container.setLayout(new BorderLayout());
container.add(textField, BorderLayout.NORTH);
container.add(panelMain, BorderLayout.CENTER);
// 设置界面置顶
this.setAlwaysOnTop(true);
// 设置界面居中
this.setLocationRelativeTo(null);
//结束窗口所在的应用程序
setDefaultCloseOperation(3);
setVisible(true);
}
这是实现窗口及按钮的代码,为了方便阅读,我添加了注释,如果不够理解可以看一看《Java2实用教程》的第九章组件及事件处理。
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
JButton button = (JButton) e.getSource();
String buttonText = button.getText();
if (buttonText.equals("清除")) {
num1 = 0;
num2 = 0;
operator = ' ';
textField.setText("");
} else if (buttonText.matches("[0-9]")) {
if (operator == ' ') {
num1 = num1 * 10 + Double.parseDouble(buttonText);
} else {
num2 = num2 * 10 + Double.parseDouble(buttonText);
}
textField.setText(textField.getText() + buttonText);
} else if (buttonText.matches("[+\\-*/]")) {
if (operator != ' ') {
calculate();
}
operator = buttonText.charAt(0);
textField.setText(textField.getText() + buttonText);
} else if (buttonText.equals("=")) {
calculate();
operator = ' ';
}
}
这段代码是事件监听器中的一个方法actionPerformed,它用于响应用户在计算器上点击按钮时的事件。当用户选择了一个按钮时,button对象代表了发生事件的按钮,而buttonText则代表了发生事件的按钮的文本内容。
首先通过判断if (buttonText.equals("清除")),来判断用户是点击了“清除”按钮,如果是该按钮,则会将 num1,num2,operator 等参数清零,文本框textField 也将置为空。接着,通过判断if (buttonText.matches("[0-9]"))。如果用户选择了一个数字按钮,则首先需要检查operator变量是否为空,如果是,则代表用户正在输入第一个数字,此时需要将num1乘以10再加上当前输入的数字;否则代表用户正在输入第二个数字,此时需要将num2乘以10再加上输入的数字。另外,同时需要把数字文本追加到textField的文本末尾,便于用户看到自己输入的数字。
接着,通过判断if (buttonText.matches("[+\\-*/]")),来判断用户是选择了加减乘除中的一个运算符号。在这种情况下,首先需要判断operator是否为空,如果不为空,则表示此时可以立即计算出之前输入的运算,并将结果显示在textField中。然后将选择的运算符号赋值给operator,表示下一步用户需要输入第二个数字。
最后,如果用户选择的是等于号“=”,则需要立即进行运算,然后将operator变量设为空。
注意到,对于数字和运算符号的判断语句里使用了正则表达式的语法,用来判断字符串是否符合特定的格式。在这里,[0-9]表示任何一个数字字符,而[+\-*/]表示加、减、乘、除中的一个。
private void calculate() {
double result = 0;
switch (operator) {
case '+':
result = num1 + num2;
break;
case '-':
result = num1 - num2;
break;
case '*':
result = num1 * num2;
break;
case '/':
if (num2 != 0) {
result = num1 / num2;
} else {
System.out.println("除数不能为0!");
}
break;
}
num1 = result;
num2 = 0;
textField.setText(String.valueOf(result));
}
public static void main(String[] args) {
new Calculator();
}
}
这段代码是实现加减乘除的函数方法。
完整代码
package ap1;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.JFrame;
public class Calculator extends JFrame implements ActionListener{
JTextField textField; //定义一个文本框
//定义一些按钮
JButton buttonAdd, buttonSubtract, buttonMultiply, buttonDivide, buttonEquals,buttonPoint,buttonClear;
JPanel panelMain; //定义一个面板
double num1, num2;
char operator;
public Calculator() {
//设置窗口名字,大小
setTitle("简易计算器");
setSize(350, 350);
textField = new JTextField(30);
textField.setEditable(false);
//添加按钮
buttonAdd = new JButton("+");
buttonSubtract = new JButton("-");
buttonMultiply = new JButton("*");
buttonDivide = new JButton("/");
buttonEquals = new JButton("=");
buttonClear = new JButton("清除");
panelMain = new JPanel(new GridLayout(4,5)); //网格式布局,四行五列
panelMain.add(buttonAdd);
panelMain.add(buttonSubtract);
panelMain.add(buttonMultiply);
panelMain.add(buttonDivide);
panelMain.add(buttonEquals);
panelMain.add(buttonClear);
//添加监听
buttonAdd.addActionListener(this);
buttonSubtract.addActionListener(this);
buttonMultiply.addActionListener(this);
buttonDivide.addActionListener(this);
buttonEquals.addActionListener(this);
buttonClear.addActionListener(this);
//添加1到9的按钮
for (int i = 1; i <= 9; i++) {
JButton button = new JButton("" + i);
button.addActionListener(this);
panelMain.add(button);
}
panelMain.add(new JButton());
JButton button0 = new JButton("0");
button0.addActionListener(this);
panelMain.add(button0);
panelMain.add(new JButton());
Container container = getContentPane();
container.setLayout(new BorderLayout());
container.add(textField, BorderLayout.NORTH);
container.add(panelMain, BorderLayout.CENTER);
// 设置界面置顶
this.setAlwaysOnTop(true);
// 设置界面居中
this.setLocationRelativeTo(null);
//结束窗口所在的应用程序
setDefaultCloseOperation(3);
setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
JButton button = (JButton) e.getSource();
String buttonText = button.getText();
if (buttonText.equals("清除")) {
num1 = 0;
num2 = 0;
operator = ' ';
textField.setText("");
} else if (buttonText.matches("[0-9]")) {
if (operator == ' ') {
num1 = num1 * 10 + Double.parseDouble(buttonText);
} else {
num2 = num2 * 10 + Double.parseDouble(buttonText);
}
textField.setText(textField.getText() + buttonText);
} else if (buttonText.matches("[+\\-*/]")) {
if (operator != ' ') {
calculate();
}
operator = buttonText.charAt(0);
textField.setText(textField.getText() + buttonText);
} else if (buttonText.equals("=")) {
calculate();
operator = ' ';
}
}
private void calculate() {
double result = 0;
switch (operator) {
case '+':
result = num1 + num2;
break;
case '-':
result = num1 - num2;
break;
case '*':
result = num1 * num2;
break;
case '/':
if (num2 != 0) {
result = num1 / num2;
} else {
System.out.println("除数不能为0!");
}
break;
}
num1 = result;
num2 = 0;
textField.setText(String.valueOf(result));
}
public static void main(String[] args) {
new Calculator();
}
}
3.总结
以上就是简单的计算器的代码实现及分析,大家有兴趣可以自己去试试。
上一篇: 【无标题】Class com.sun.tools.javac.tree.JCTree$JCImport does not have member field ‘c
下一篇: 【华为笔试题汇总】[重制版+笔试经验分享] 2024-03-20-华为春招笔试题-三语言题解(Python/Java/Cpp)
本文标签
声明
本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。