java实现加减乘除功能的计算器并设计出相应界面

题目要求:实现一个具有加减乘除功能的计算器,界面包括菜单栏、显示区和按键区。

界面如下:(只实现加减乘除的四则运算功能,其他功能并未实现)

 

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.util.*;
import java.util.List;

public class Calculate extends JFrame implements ActionListener{
    JTextField textField; // 文本框,用于显示计算结果和用户输入的表达式
    public static void main(String[] args){
        Calculate calculate=new Calculate(); // 创建计算器对象
    }
    Calculate(){
        this.setTitle("计算器"); // 设置窗口标题
        this.setVisible(true); // 设置窗口可见
        this.setSize(500,600); // 设置窗口大小
        this.setLocation(0, 100); // 设置窗口位置
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 设置窗口关闭时的操作

        JMenuBar MenuBar=new JMenuBar(); // 创建菜单栏
        JMenu Menu1=new JMenu("查看(V)"); // 创建菜单1
        MenuBar.add(Menu1); // 将菜单1添加到菜单栏
        JMenu Menu2=new JMenu("编辑(E)"); // 创建菜单2
        MenuBar.add(Menu2); // 将菜单2添加到菜单栏
        JMenu Menu3=new JMenu("帮助(H)"); // 创建菜单3
        MenuBar.add(Menu3); // 将菜单3添加到菜单栏
        this.setJMenuBar(MenuBar); // 将菜单栏添加到窗口

        this.setLayout(new BorderLayout()); // 设置窗口布局为边界布局
        textField=new JTextField(); // 创建文本框对象
        Dimension size = new Dimension(200, 200); // 创建文本框的尺寸对象
        textField.setPreferredSize(size); // 设置文本框的尺寸
        textField.setHorizontalAlignment(JTextField.RIGHT); // 设置文本框中的文本右对齐
        this.add(textField,BorderLayout.NORTH); // 将文本框添加到窗口的北部
        JPanel panel=new JPanel(); // 创建面板对象
        panel.setLayout(new GridLayout(5,6)); // 设置面板布局为网格布局

        JButton[] buttons=new JButton[28]; // 创建按钮数组
        String[] str={"MC","MR","MS","M+","M-",
                "<-","CE","C","+-","sqrt",".",
                "%","1/x","9","8", "7","6",
                "5","4","3","2","1",
                "0","+","-","*","/","="}; // 创建按钮的文本数组
        for(int i=0;i<str.length;i++){
            buttons[i]=new JButton(str[i]); // 创建按钮对象
            buttons[i].addActionListener(this); // 为按钮添加事件监听器
            panel.add(buttons[i]); // 将按钮添加到面板
        }
        this.add(panel,BorderLayout.CENTER); // 将面板添加到窗口的中心

        this.setVisible(true); // 设置窗口可见
    }
    String[] process_button={"9","8", "7","6",
            "5","4","3","2","1",
            "0","+","-","*","/"}; // 创建包含运算符和数字的数组
            List<String> Process_Button=Arrays.asList(process_button); // 将数组转换为列表
    @Override
    public void actionPerformed(ActionEvent e) { // 事件处理方法
        String s=e.getActionCommand(); // 获取事件源的文本
        if(Process_Button.contains(s)){ // 如果事件源是数字或运算符
            textField.setText(textField.getText()+s); // 在文本框中添加数字或运算符
        }
        else if(s.equals("=")){ // 如果事件源是等号
            String expression=textField.getText(); // 获取文本框中的表达式
            int ans=0; // 初始化计算结果
            Stack<Integer> sta_num=new Stack<Integer>(); // 创建数字栈
            int num=0; // 初始化数字
            char sign='+'; // 初始化运算符
            for (int i = 0; i < expression.length(); i++) { // 遍历表达式中的每个字符
                char c = expression.charAt(i); // 获取当前字符
                if (Character.isDigit(c)) { // 如果当前字符是数字
                    num = num * 10 + c - '0'; // 将数字字符转换为数字并添加到数字变量中
                }
                if (!Character.isDigit(c)||i == expression.length() - 1) { // 如果当前字符不是数字或已经到达表达式末尾
                    if (sign == '+') { // 如果运算符是加号
                        sta_num.push(num); // 将数字压入数字栈
                    } else if (sign == '-') { // 如果运算符是减号
                        sta_num.push(-num); // 将相反压入数字栈
                    } else if (sign == '*') { // 如果运算符是乘号
                        sta_num.push(sta_num.pop() * num); // 将数字栈顶元素弹出并与当前数字相乘,将压入数字栈
                    } else if (sign == '/') { // 如果运算符是除号
                        if (num == 0) { // 如果除数为0
                            throw new ArithmeticException("Division by zero"); // 抛出除零异常
                        }
                        sta_num.push(sta_num.pop() / num); // 将数字栈顶元素弹出并与当前数字相除,将结果压入数字栈
                    }
                    sign = c; // 更新运算符
                    num = 0; // 重置数字
                }
            }

            while (!sta_num.isEmpty()) { // 当数字栈不为空时
                ans += sta_num.pop(); // 将数字栈顶元素弹出并加到计算结果中
            }
            textField.setText(Integer.toString(ans)); // 将计算结果显示在文本框中
        }
    }
}

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
实现加减乘除等运算,可以参照Windows计算器功能进行Java图形界面设计。 首先,需要创建一个窗口界面,可以使用Java的Swing或JavaFX库来实现。窗口中应包含一个用于显示输入和输的文本框,以及按钮,用于输入数字和运算符。 其次,需要实现按钮的功能。可以为每个数字和运算符创建一个按钮,并为每个按钮添加相应的事件处理程序。例如,点击数字按钮时,将数字追加到文本框中;点击运算符按钮时,检查文本框中的输入,并执行相应的运算操作。 在实现运算功能时,需要考虑到不同的运算符和运算操作的优先级。可以使用栈来解析表达式,并将其转换为逆波兰表达式。然后,再使用逆波兰表达式来计算结果。在计算过程中,使用一个栈来存储操作数,并按照逆波兰表达式的顺序进行计算。 最后,实现结果的显示。当用户点击“等号”按钮时,获取文本框中的表达式,并使用之前所述的方法计算结果。然后,将结果显示在文本框中。 除了基本的加减乘除运算,还可以考虑实现其他功能,如求平方、开方、倒数等。可以为这些功能添加额外的按钮,并在事件处理程序中实现相应的计算逻辑。 总结来说,要实现加减乘除等运算,可以参照Windows计算器功能,在Java图形界面中创建窗口、按钮和文本框,并为按钮添加事件处理程序来实现相应的运算功能。同时,考虑运算符和运算操作的优先级,并使用逆波兰表达式和栈来进行计算。最后,将结果显示在文本框中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值