首页 > 其他分享 >计算器的初步实现(一)

计算器的初步实现(一)

时间:2024-06-04 20:02:35浏览次数:13  
标签:实现 numi 初步 ++ int num 计算器 new JButton

窗口的实现要用到JFrame,计算的实现要通过ActionListener

1.窗口的实现

public class calculatorLBW522
{
    public void showUI()
    {
        CalucOfaction ual = new CalucOfaction();
        JFrame jf = new JFrame();
        jf.setTitle("calculator");
        jf.setSize(210,240);
        jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        jf.setLocation(500,300);
        FlowLayout flow = new FlowLayout();
        jf.setLayout(flow);

        JTextField cOUT = new JTextField(30);

        JButton btnAC = new JButton("A");
        JButton btnsp = new JButton("=");
        JButton btnadd = new JButton("+");
        JButton btnleft = new JButton("(");
        JButton btnright = new JButton(")");
        JButton btn0 = new JButton("0");
        JButton btnp = new JButton(".");
        JButton btnCOM = new JButton("%");




        JButton[] btnNUM = new JButton[12];
        String[] labelNUMSTR = {"1","2","3","-","4","5","6","*","7","8","9","\\"};
        for(int i =0;i<btnNUM.length;i++)
        {
            btnNUM[i] = new JButton(labelNUMSTR[i]);
        }

        jf.add(cOUT);
        jf.add(btnAC);
        jf.add(btnsp);
        jf.add(btnCOM);
        jf.add(btnadd);

        cOUT.addActionListener(ual);
        btnAC.addActionListener(ual);
        btnsp.addActionListener(ual);
        btnCOM.addActionListener(ual);
        btnadd.addActionListener(ual);


        for(int i = 0; i< labelNUMSTR.length; i++)
        {

            jf.add(btnNUM[i]);
            btnNUM[i].addActionListener(ual);


        }

        jf.add(btn0);
        jf.add(btnp);//"."
        jf.add(btnleft);
        jf.add(btnright);

        btn0.addActionListener(ual);
        btnp.addActionListener(ual);
        btnleft.addActionListener(ual);
        btnright.addActionListener(ual);



        jf.setVisible(true);
        jf.setResizable(false);




    }

    public static void main(String[] args)
    {
        calculatorLBW522 cal = new calculatorLBW522();
        cal.showUI();
    }


}

2.具体功能的实现

import javax.swing.*;
import java.awt.event.ActionEvent;
import java.util.Arrays;
import java.util.Date;
import java.awt.event.ActionListener;
import java.util.ArrayList;


public class CalucOfaction implements ActionListener
{
    ArrayList<String> strcmputeArr = new ArrayList<>();
    int[] num = new int[100];

    public void actionPerformed(ActionEvent e)
    {
        strcmputeArr.add(e.getActionCommand());
        System.out.println(strcmputeArr);
        if(e.getActionCommand().equals("A"))
        {
            strcmputeArr.clear();
            System.out.println("已清除,请重新计算");
        }
        else if (e.getActionCommand().equals("="))
        {

            String[] strcmputeStr = strcmputeArr.toArray(new String[0]);
            int result = cmpute(strcmputeStr);
            System.out.println(result);

        }

    }

    int BaseCompute(int num1,int num2,char a)
    {
        switch (a)
        {
            case '+':
                return num1 + num2;
            case '-':
                return num1 - num2;
            case '*':
                return num1 * num2;
            case '/':
                return num1 / num2;
            case '%':
                return num1 % num2;
            default:
                return 0;
        }


    }

    int cmpute(String[] str)
    {
        int[] num = new int[100]; //存放的数字
        int[] temp = new int[100];//中间结果
        int numi = 0;
        int numii = 0;
        int tempi = 0;
        int tempii = 0;
        int i = 0;//i代表字符串的位置


            char c0;
            if(str[i].equals("("))
            {
                i++;//移动到“(”后的位置
                num[numi++] = Integer.parseInt(str[i++]);//将“(”后的数字传递给num

                char c1 = str[i].charAt(0);
                i++;//移动到符合后的位置
                num[numi++] = Integer.parseInt(str[i++]);
                i++;//跳到“)”后的位置
                temp[tempi++] = BaseCompute(num[numi - 2], num[numi - 1],c1);
                numi -=2;

            }

            c0 = str[i].charAt(0);
            i++;

            if(str[i].equals("("))
            {
                i++;//移动到“(”后的位置
                num[numi++] = Integer.parseInt(str[i++]);//将“(”后的数字传递给num

                char c1 = str[i].charAt(0);
                i++;//移动到符合后的位置
                num[numi++] = Integer.parseInt(str[i++]);//将数字传递给num后,后移
                i++;//跳到“)”后的位置
                temp[tempi++] = BaseCompute(num[numi - 2], num[numi - 1],c1);
                numi -=2;
            }
                temp[tempi++] = BaseCompute(temp[tempi-3],temp[tempi-2],c0);





        return temp[tempi-1];
    }

}

注:初学者能力有限,只能实现最最*100基本的功能,欢迎大佬指正。

标签:实现,numi,初步,++,int,num,计算器,new,JButton
From: https://www.cnblogs.com/lbwxxc/p/18227372

相关文章

  • 设计程序实现解析www.baidu.com的域名,把获取到的百度的IP地址全部输出到终端并验证是
    目录题目分析代码结果题目设计程序实现解析www.baidu.com的域名,把获取到的百度的IP地址全部输出到终端并验证是否正确。分析1.通过目标域名获取目标IP地址对应的网络字节序(需强转为对应的类型),使用gethostbyname()函数;2.把获取的网络字节序转换为点分十进制的IP地址(需强......
  • 网络编程练习题---利用UDP协议实现组播通信
    目录题目解析代码实现题目解析由于该题需要实现组播通信,所以我们需要将套接字文件句柄设置为组播属性,并将需要通信的用户端IP地址,加入组中。由于组播通信需要实现一对多发送消息,所以还需要将套接字文件句柄的广播属性一并开启。由于该题实现过程使用到了线程相关函数接口,所......
  • springboot智慧校园管理系统的设计与实现(文档+源码)
    大家好,我是永钊,一个混迹在java圈的码农,今天要和大家聊的是一款基于springboot的智慧校园管理系统,项目源码请联系永钊,目前有各类成品毕设javawebsshssmspringboot等等项目框架,源码丰富,欢迎咨询。 本网站系统采用了Mysql数据库,Java语言,SpringBoot框架等技术进行编程实......
  • 【华为OD】D卷真题200分:会议接待 python代码实现[思路+代码]
    【华为OD】2024年C、D卷真题集:最新的真题集题库C/C++/Java/python/JavaScript【华为OD】2024年C、D卷真题集:最新的真题集题库C/C++/Java/python/JavaScript-CSDN博客JS、python、Java、C、C++代码实现:【华为OD】D卷真题200分:会议接待JavaScript代码实现[思路+代码]-CSDN......
  • 【华为OD】D卷真题200分:会议接待 C语言代码实现[思路+代码]
    【华为OD】2024年C、D卷真题集:最新的真题集题库C/C++/Java/python/JavaScript【华为OD】2024年C、D卷真题集:最新的真题集题库C/C++/Java/python/JavaScript-CSDN博客JS、python、Java、C、C++代码实现:【华为OD】D卷真题200分:会议接待JavaScript代码实现[思路+代码]-CSDN......
  • springboot的设计与实现(文档+源码)足球青训俱乐部管理后台系统
    大家好,我是永钊,一个混迹在java圈的码农,今天要和大家聊的是一款基于springboot的足球青训俱乐部管理后台系统,项目源码请联系永钊,目前有各类成品毕设javawebsshssmspringboot等等项目框架,源码丰富,欢迎咨询。 本网站系统重点阐述了足球青训俱乐部管理后台系统的开发过程,......
  • udp协议实现组播功能
    /****************************************************************************************************************************************filename:multicast.c*author:[email protected]*date:2024/06/04*brief:小组实现,小组中的每位......
  • 在线考试|基于Springboot的在线考试管理系统设计与实现(源码+数据库+文档)
    在线考试管理系统目录目录基于Springboot的在线考试管理系统设计与实现一、前言二、系统设计三、系统功能设计 1、前台:2、后台管理员功能四、数据库设计 五、核心代码 六、论文参考七、最新计算机毕设选题推荐八、源码获取:博主介绍:✌️大厂码农|毕设布道师,......
  • 健身管理小程序|基于微信开发健身管理小程序的系统设计与实现(源码+数据库+文档)
    健身管理小程序目录基于微信开发健身管理小程序设计与实现一、前言二、系统设计三、系统功能设计 小程序端:后台四、数据库设计 五、核心代码 六、论文参考七、最新计算机毕设选题推荐八、源码获取:博主介绍:✌️大厂码农|毕设布道师,阿里云开发社区乘风者计划专......
  • 基于redis实现可重入分布式锁
    前提redis+lua原理采用redishash数据类型,实现分布式可重入锁hash结构中存储字段value,countvalue:加锁的值,重入加锁时判断当前value和传入的value是否相等,相等情况下认为是重入锁,将count加一,不等属于其他场景抢占锁,该情况下获取锁失败锁释放时,判断value是否相等,相等情况下是......