锋盈数科-知识库 Logo
首页
软件开发
计算机基础
Hello Halo
新手必读
关于本知识库
登录 →
锋盈数科-知识库 Logo
首页 软件开发 计算机基础 Hello Halo 新手必读 关于本知识库
登录
  1. 首页
  2. 软件开发
  3. JAVA
  4. 用Java编写简单的计算器

用Java编写简单的计算器

0
  • 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

标签: #JAVA 991
相关文章

Spring 实现 3 种异步接口 2024-10-18 09:07

大家好,我是苏三~ 如何处理比较耗时的接口? 这题我熟,直接上异步接口,使用 Callable、WebAsyncTask 和 DeferredResult、CompletableFuture等均可实现。 但这些方法有局限性,处理结果仅返回单个值。在某些场景下,如果需要接口异步处理的同时,还持续不断地

重学SpringBoot3-集成Redis(五)之布隆过滤器 2024-10-08 11:24

更多SpringBoot3内容请关注我的专栏:《SpringBoot3》 期待您的点赞👍收藏⭐评论✍ 重学SpringBoot3-集成Redis(五)之布隆过滤器 1. 什么是布隆过滤器? * 基本概念 适用场景 2. 使用 Redis 实现布隆过滤器 * 项目依赖 Redis 配置

SpringBoot整合异步任务执行 2024-10-08 11:24

同步任务: 同步任务是在单线程中按顺序执行,每次只有一个任务在执行,不会引发线程安全和数据一致性等 并发问题 同步任务需要等待任务执行完成后才能执行下一个任务,无法同时处理多个任务,响应慢,影响用 户体验 异步任务: 异步任务是在多线程中同时执行,多个任务可以并发执行,同时处理多个请求,响应快,资源

springboot kafka多数据源,通过配置动态加载发送者和消费者 2024-10-08 11:24

前言 最近做项目,需要支持kafka多数据源,实际上我们也可以通过代码固定写死多套kafka集群逻辑,但是如果需要不修改代码扩展呢,因为kafka本身不处理额外逻辑,只是起到削峰,和数据的传递,那么就需要对架构做一定的设计了。 准备test kafka本身非常容易上手,如果我们需要单元测试,引入ja

SpringBoot 集成 Redis 2024-10-08 11:24

一:SpringBoot 集成 Redis ①Redis是一个 NoSQL(not only)数据库, 常作用缓存 Cache 使用。 ②Redis是一个中间件、是一个独立的服务器;常用的数据类型: string , hash ,set ,zset , list ③通过Redis客户端可以使用多种语

SpringBoot整合QQ邮箱 2024-10-08 11:24

SpringBoot可以通过导入依赖的方式集成多种技术,这当然少不了我们常用的邮箱,现在本章演示SpringBoot整合QQ邮箱发送邮件…. 下面按步骤进行: 1.获取QQ邮箱授权码 1.1 登录QQ邮箱 1.2 开启SMTP服务 找到下图中的SMTP服务区域,如果当前账号未开启的话自己手动开启。

目录

IT 外包服务商

  • 意见投递
  • zyf6619

软件开发应用

主菜单

  • 首页
  • 软件开发
  • 计算机基础
  • Hello Halo
  • 新手必读
  • 关于本知识库
Copyright © 2024 your company All Rights Reserved. Powered by Halo.