最适合初学者的java版计算器---【课程设计】

关于毕业设计这个总目录
一定要看,因为JAVA工具,tomcat,MAVEN , idea 下载都在这篇文件当中
JAVA项目环境必知必会–【大作业及毕设项目】
部分截图如下:(持续增加中)
在这里插入图片描述

在这里插入图片描述

JAVA的有代码一般都叫【课程设计】
SSM或JAVAWEB(JSP)的【唐诗300首】
springBoot 的叫【JSB项目实战】
PHP的项目叫【白嫖项目】
其它的有可能叫【课程设计】或【毕业设计】

本系列校训

互相伤害互相卷,玩命学习要你管,天生我才必有用,我命由我不由天!

环境及工具:

本系列环境

环境win11
工具idea 2020.1/idea 2018.3(为什么不使用更高的版本,一个是破解的BUG问题,一个是我用高的你用低的那就不兼容了)
jdk1.8(不管是学校还是企业里最主流的)
数据库
maven3.6.0
项目导入方式打开目录
数据库前端工具

项目说明

初学者的入门关键

swing 项目当然是大量的布局了。
没有可视化的布局,那对初学者来说就是一种折磨了
在这里插入图片描述
这个小项目工作量比较小,也比较粗糙。当做学习还是相当的不错的。当毕业设计就有点拿不出手了。但是还是相当的值得学习

总体功能

‌Java计算器的主要功能包括以下几种‌:

‌基础数学运算‌:实现四则运算(加、减、乘、除)。
‌用户输入‌:接受用户输入的数字和操作符。
‌结果展示‌:显示运算结果。
‌错误处理‌:对非法输入或计算错误进行处理,例如除零错误。
‌实现这些功能的具体步骤和代码示例如下‌:
AI给出的代码如下:

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class CalculatorFrame extends JFrame implements ActionListener {
    private JTextField display;
    private JButton[] buttons = new JButton; // 0-9数字按钮
    private JButton[] ops = new JButton:ml-citation{ref="1" data="citationList"}; // 加减乘除运算符按钮
    private Calculator calc = new Calculator(); // 计算器对象

    public CalculatorFrame() {
        super("Calculator");
        initUI(); // 初始化界面组件
        addActionListeners(); // 添加事件监听器
    }
    
    private void initUI() {
        display = new JTextField(16); // 显示区文本框,初始长度为16个字符
        display.setEditable(false); // 设置不可编辑,只显示内容
        setLayout(new BorderLayout()); // 设置布局管理器为BorderLayout
        add(display, BorderLayout.NORTH); // 添加显示区到北边区域
        
        JPanel panel = new JPanel(); // 创建面板用于放置按钮
        panel.setLayout(new GridLayout(4, 3)); // 设置面板布局为4行3列的网格布局
        // 添加数字按钮和运算符按钮到面板中...
        add(panel); // 将面板添加到窗口中...
    }
    
    private void addActionListeners() {
        for (int i = 0; i < buttons.length; i++) { // 为每个按钮添加事件监听器... }
        for (int i = 0; i < ops.length; i++) { // 为每个运算符按钮添加事件监听器... }
    }
    
    public static void main(String[] args) { // 主函数,启动程序... }
}

本着杀鸡用牛马的原则,还是使用了maven.
毕竟,如果你不会maven 自己设置个SRC文件夹也是可以运行。
在这里插入图片描述

配置文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>computer</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

</project>

代码部分

文件编码问题。不太熟悉JAVA的同学请不要随意怀疑本程序运行出错,或不能运行,盲目修改文件
在这里插入图片描述

项目文件目录如下:
在这里插入图片描述

找到关键核心代码的方法:
应用软件的核心代码是指这个程序最关键部分的代码。例如WinRAR,它的核心代码就是压缩算法部分,而诸如用户界面、操作系统移植等部分就无足轻重了。
商城类的核心代码是指业务层的代码,比如你商城的核心代码就是:商品、购物车、创建订单、支付这些代码就是核心代码。

作为程序员,我们经常需要看懂别人的代码。特别是在开源社区中,我们需要理解许多优秀的开源项目的代码。而在Gitee这样的代码托管平台上,我们如何快速有效地看懂别人的代码呢?本文将为大家介绍一些方法。

1.阅读README和项目介绍

在Gitee上,许多开源项目都会有自己的README文件或项目介绍。这些文件一般会介绍项目的背景、功能、使用方法等内容,可以帮助我们快速了解这个开源项目的基本情况。如果我们能够从这些文件中找到与自己相关的内容,就可以快速入手这个开源项目的代码。

2.了解项目结构和代码组织

在阅读代码之前,我们需要先了解这个开源项目的代码结构和代码组织方式。通常,开源项目会将不同的功能模块封装到不同的代码文件中,并按照一定的目录结构组织起来。如果我们能够了解这个开源项目的代码组织方式,就能更加快速地找到所需的代码。

3.利用IDE和工具

IDE和一些代码阅读工具可以帮助我们更快速、更高效地阅读代码。例如,Java开发者可以使用Eclipse或IntelliJ IDEA这样的IDE,可以快速打开代码文件、查看类、方法和变量等信息。另外,一些代码阅读工具,如Source Insight、CodeCompare等,可以帮助我们更方便地查看代码的结构和关系,以及快速跳转到相关代码。

4.关注代码注释和文档

良好的代码注释和文档可以帮助我们更快速地理解代码。因此,在阅读别人的代码时,我们可以将注意力放在代码注释和文档上。有些开源项目会提供详细的文档,有些则注重代码注释。如果我们能够针对代码注释和文档有一个系统的阅读和理解,就能更快速地掌握别人的代码。

5.跑通测试和运行项目

如果我们想更深入地了解别人的代码,可以试着跑通相关的测试,或者直接运行这个开源项目。通过跑测试和运行项目,我们可以更加直观地了解代码的实现细节和具体的业务逻辑。

总结:

以上就是在Gitee上快速理解他人代码的一些方法,希望对大家有所帮助。当然,阅读代码是一件需要耐心和细心的事情,需要我们多花一点时间和心思。只有沉下心来,慢慢阅读每一行代码,才能真正理解它们的含义和作用。

启动主程序

import javax.swing.*;

public class main {
    public static void main(String[] args) {
        SwingUtilities.invokeLater(new jsq());
    }
}



import javax.swing.*;
import java.awt.*;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.StringSelection;
import java.awt.event.*;
import java.util.ArrayList;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class jsq extends JFrame implements Runnable{
    private JButton m;
    private JButton MS;
    private JButton a2Button;
    private JButton zf;
    private JButton a1Button;
    private JButton a0Button;
    private JButton a3Button;
    private JButton d;
    private JButton jian;
    private JButton a1X;
    private JButton jia;
    private JButton dy;
    private JButton cheng;
    private JButton quyu;
    private JButton a6Button;
    private JButton a5Button;
    private JButton a4Button;
    private JButton MC;
    private JButton MR;
    private JButton chu;
    private JButton a9Button;
    private JButton a8Button;
    private JButton a7Button;
    private JButton CE;
    private JButton back;
    private JPanel JSQ;
    private JButton C;
    private JButton sqrt;
    private JTextField jsq;
    //M功能储存字符串
    private String mcc;

    jsq(){
        //界面初始化
        this.setContentPane(this.JSQ);
        this.setTitle("计算器");
        ImageIcon btx = new ImageIcon("img/ad.png");
        Image image = btx.getImage();
        this.setIconImage(image);
        this.setSize(600,300);
        this.setLocationRelativeTo(null);
        this.setResizable(false);
        this.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
        //创建菜单
        JMenuBar cd = new JMenuBar();
        JMenu bianji = new JMenu("编辑");
        JMenu chakan = new JMenu("查看");
        JMenu bangzhu = new JMenu("帮助");
        cd.add(bianji);
        cd.add(chakan);
        cd.add(bangzhu);
        JMenuItem fuzi = new JMenuItem("复制(c)");
        //绑定快捷键
        fuzi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C,KeyEvent.CTRL_DOWN_MASK | KeyEvent.SHIFT_DOWN_MASK));
        fuzi.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                System.out.println("复制了");
                String text = jsq.getText();
                // 获取系统剪贴板
                Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
                // 创建要复制的内容
                StringSelection selection = new StringSelection(text);
                // 将内容设置到剪贴板
                clipboard.setContents(selection, null);
            }
        });
        JMenuItem zhantie = new JMenuItem("粘贴(v)");
        zhantie.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_V,KeyEvent.CTRL_DOWN_MASK | KeyEvent.SHIFT_DOWN_MASK));
        zhantie.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                System.out.println("粘贴了");
                try {
                    String text = (String) Toolkit.getDefaultToolkit().getSystemClipboard().getData(DataFlavor.stringFlavor);
                    jsq.setText(text);
                } catch (Exception ex) {
                    System.out.println("报错");
                }
            }
        });
        bianji.add(fuzi);
        bianji.add(zhantie);
        this.setJMenuBar(cd);
        //显示界面
        this.setVisible(true);
        //窗口关闭监听器
        this.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
    }

    @Override
    public void run() {
        //按钮监听
        a0Button.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                pdone("0");
            }
        });
        a1Button.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                pdone("1");
            }
        });
        a2Button.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                pdone("2");
            }
        });
        a3Button.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                pdone("3");
            }
        });
        a4Button.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                pdone("4");
            }
        });
        a5Button.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                pdone("5");
            }
        });
        a6Button.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                pdone("6");
            }
        });
        a7Button.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                pdone("7");
            }
        });
        a8Button.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                pdone("8");
            }
        });
        a9Button.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                pdone("9");
            }
        });
        d.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                pdone(".");
            }
        });
        jia.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                pdone("+");
            }
        });
        jian.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                pdone("-");
            }
        });
        cheng.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                pdone("*");
            }
        });
        chu.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                pdone("/");
            }
        });
        quyu.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                pdone("%");
            }
        });
        back.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                jsq.setText(jsq.getText().substring(0,jsq.getText().length()-1));
            }
        });
        C.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                jsq.setText("");
            }
        });
        CE.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                String text = jsq.getText();
                for (int i = text.length()-1; i >=0 ; i--) {
                    if (text.charAt(i)=='+'||text.charAt(i)=='-'||text.charAt(i)=='*'||text.charAt(i)=='/'||text.charAt(i)=='%'){
                        jsq.setText(text.substring(0,i+1));
                        break;
                    }
                }
            }
        });
        dy.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                jsq.setText(String.valueOf(qiuhe()));
            }
        });
        a1X.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                double number = qiuhe();
                double reciprocal = 1.0 / number;
                jsq.setText(String.valueOf(reciprocal));
            }
        });
        sqrt.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                double number = qiuhe();
                jsq.setText(String.valueOf(Math.sqrt(number)));
            }
        });
        zf.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                jsq.setText("-"+qiuhe());
            }
        });
        MC.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                mcc ="";
            }
        });
        MR.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                jsq.setText(mcc);
            }
        });
        MS.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                mcc=jsq.getText();
            }
        });
        m.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                qiuhe();
                double msum = Double.parseDouble(jsq.getText()) + Double.parseDouble(mcc);
                jsq.setText(String.valueOf(msum));
            }
        });
    }

    void pdone(String text) {
        if (jsq.getText().isEmpty()) {
            jsq.setText(text);
        }else {
            jsq.setText(jsq.getText()+text);
        }
    }

    ArrayList<String> fengg(){
        //分割输入字符
        String text = jsq.getText();
        Pattern pattern = Pattern.compile("\\d+\\.?\\d*|[\\+\\-\\*\\/\\%]");
        Matcher matcher = pattern.matcher(text);
        ArrayList<String> result = new ArrayList<>();
        //添加到结果列表
        while (matcher.find()) {
            result.add(matcher.group());
        }
        return result;
    }

    double qiuhe(){
        double sum = 0;
        ArrayList<String> jis = fengg();
        //判断有无运算符
        if (!jis.contains("*")&&!jis.contains("/")&&!jis.contains("%")&&!jis.contains("+")&&!jis.contains("-")){
            return Double.parseDouble(jsq.getText());
        }
        //先乘除
        while (jis.contains("*")||jis.contains("/")||jis.contains("%")){
            int i = jis.indexOf("*");
            int j = jis.indexOf("/");
            int q = jis.indexOf("%");

            int a = 0;
            //如果一个为-1 则直接选择另一个
            if (i != -1 && (j == -1 || i < j) && (q == -1 || i < q)) {
                a = i;
            } else if (j != -1 && (i == -1 || j < i) && (q == -1 || j < q)) {
                a = j;
            } else if (q != -1) {
                a = q;
            }
            double v;
            if (jis.get(a).equals("*")) {
                v = Double.parseDouble(jis.get(a - 1)) * Double.parseDouble(jis.get(a + 1));
            }else if (jis.get(a).equals("/")){
                if (Double.parseDouble(jis.get(a + 1))==0){
                    break;
                }
                v = Double.parseDouble(jis.get(a - 1)) / Double.parseDouble(jis.get(a + 1));
            }else {
                if (Double.parseDouble(jis.get(a + 1))==0){
                    break;
                }
                v = Double.parseDouble(jis.get(a - 1)) % Double.parseDouble(jis.get(a + 1));
            }
            jis.remove(a+1);
            jis.set(a, String.valueOf(v));
            jis.remove(a-1);
            sum=v;
        }
        //再加减
        while (jis.contains("+")||jis.contains("-")){
            int i = jis.indexOf("+");
            int j = jis.indexOf("-");
            int a;
            //如果一个为-1 则直接选择另一个
            if (i == -1) {
                a = j;
            } else if (j == -1) {
                a = i;
            } else {
                a = i > j ? j : i;
            }
            double v;
            if (jis.get(a).equals("+")) {
                v = Double.parseDouble(jis.get(a - 1)) + Double.parseDouble(jis.get(a + 1));
            }else {
                v = Double.parseDouble(jis.get(a - 1)) - Double.parseDouble(jis.get(a + 1));
            }
            jis.remove(a+1);
            jis.set(a, String.valueOf(v));
            jis.remove(a-1);
            sum=v;
        }
        return sum;
    }


}

运行的界面

我的显示器是4K,在1920或2K下面看上去要大一些。
在这里插入图片描述

关于JAVA的小游戏,其实我最推荐的是21点,因为那里的算法比较多。能学到的东西也多。
在这里插入图片描述
在这里插入图片描述

总结

就一句,真的很实用,真的太实用了了。

以前的学习的人,没有那么正规,但是潜下心写代码。现在的人呢?除了各种网络的BBLL,真心写代码的还能找不到工作?每个人都是springBoot ,甚至springcloud 起步,但是实际的分析能力真的是…

配套资源

最适合初学者的java版计算器—【课程设计】代码下载

https://download.youkuaiyun.com/download/dearmite/90931169

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

项目张雪峰之巅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值