用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.总结

以上就是简单的计算器的代码实现及分析,大家有兴趣可以自己去试试。



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。