1. 首页
  2. 软件开发
  3. JAVA
  4. 用Java编写简单的计算器

用Java编写简单的计算器

  • 发布于 2024-09-20
  • 0 次阅读

目录

1.思路与分析

2.程序代码及分析

3.总结


1.思路与分析

首先我们需要提供一个面板,一些按钮,一个文本框,它可以实现简单的加,减,乘,除,接着我们可以将这些想法付诸行动。

2.程序代码及分析

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

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


原文链接: https://blog.csdn.net/2302_78593467/article/details/135036980