From 70fd0a14913aee82d13568743e019c8369d87a23 Mon Sep 17 00:00:00 2001 From: tuyu Date: Thu, 9 Jun 2022 21:39:26 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AF=BE=E7=A8=8B=E8=AE=BE=E8=AE=A1=E5=B7=B2?= =?UTF-8?q?=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/java2022spring/Calculate.java | 63 +++++++++++++++ src/java2022spring/Calculator.java | 121 +++++++++++++++++++++++++++++ src/java2022spring/Main.java | 10 +++ 3 files changed, 194 insertions(+) create mode 100644 src/java2022spring/Calculate.java create mode 100644 src/java2022spring/Calculator.java create mode 100644 src/java2022spring/Main.java diff --git a/src/java2022spring/Calculate.java b/src/java2022spring/Calculate.java new file mode 100644 index 0000000..8101279 --- /dev/null +++ b/src/java2022spring/Calculate.java @@ -0,0 +1,63 @@ +package java2022spring; + import java.util.*; + public class Calculate { + public String insetBlanks(String s) { + String result = ""; + for (int i = 0; i < s.length(); i++) { + if (s.charAt(i) == '(' || s.charAt(i) == ')' || + s.charAt(i) == '+' || s.charAt(i) == '-' + || s.charAt(i) == '*' || s.charAt(i) == '/') + result += " " + s.charAt(i) + " "; + else + result += s.charAt(i); + } + return result; + } + + public double evaluateExpression(String expression) { + Stack operandStack = new Stack<>(); + Stack operatorStack = new Stack<>(); + expression = insetBlanks(expression); + String[] tokens = expression.split(" "); + for (String token : tokens) { + if (token.length() == 0) + continue; + + else if (token.charAt(0) == '+' || token.charAt(0) == '-') { + + while (!operatorStack.isEmpty()&&(operatorStack.peek() == '-' || operatorStack.peek() == '+' || operatorStack.peek() == '/' || operatorStack.peek() == '*')) { + processAnOperator(operandStack, operatorStack); + } + operatorStack.push(token.charAt(0)); + } + + else if (token.charAt(0) == '*' || token.charAt(0) == '/') { + while (!operatorStack.isEmpty()&&(operatorStack.peek() == '/' || operatorStack.peek() == '*')) { + processAnOperator(operandStack, operatorStack); + } + operatorStack.push(token.charAt(0)); + } + else { + operandStack.push(Double.parseDouble(token)); + } + } + while (!operatorStack.isEmpty()) { + processAnOperator(operandStack, operatorStack); + } + return operandStack.pop(); + } + public void processAnOperator(Stack operandStack, Stack operatorStack) { + char str = operatorStack.pop(); + Double str1 = operandStack.pop(); + Double str2 = operandStack.pop(); + if (str == '+') + operandStack.push(str1 + str2); + else if (str == '-') + operandStack.push(str2 - str1); + else if (str == '*') + operandStack.push(str1 * str2); + else if (str == '/') + operandStack.push(str2 / str1); + } + } + diff --git a/src/java2022spring/Calculator.java b/src/java2022spring/Calculator.java new file mode 100644 index 0000000..dabab01 --- /dev/null +++ b/src/java2022spring/Calculator.java @@ -0,0 +1,121 @@ +package java2022spring; + import java.awt.BorderLayout; + import java.awt.CardLayout; + import java.awt.Dimension; + import java.awt.GridLayout; + import java.awt.TextField; + import java.awt.event.ActionEvent; + import java.awt.event.ActionListener; + import java.util.Stack; + import javax.swing.JButton; + import javax.swing.JFrame; + import javax.swing.JMenu; + import javax.swing.JMenuBar; + import javax.swing.JMenuItem; + import javax.swing.JPanel; + import javax.swing.JTextField; + public class Calculator extends JFrame{ + private double result=0; + private int count=0; + public Calculator() { + this.setSize(330,399); + this.setTitle("计算器"); + init(); + this.setVisible(true); + this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + } + public void init() { + this.setLayout(new BorderLayout()); + JTextField textField=new JTextField(); + textField.disable(); + textField.setPreferredSize(new Dimension(this.getWidth(),50)); + this.add(textField,BorderLayout.NORTH); + JPanel panel=new JPanel(); + panel.setLayout(new BorderLayout()); + this.add(panel, BorderLayout.CENTER); + + JPanel panelN=new JPanel(); + panelN.setLayout(new GridLayout(1,6)); + JButton MC=new JButton("MC"); + JButton MR=new JButton("MR"); + JButton M0=new JButton("M+"); + JButton M1=new JButton("M-"); + JButton MS=new JButton("MS"); + JButton M=new JButton("M"); + panelN.add(MC);panelN.add(MR);panelN.add(M0); + panelN.add(M1);panelN.add(MS);panelN.add(M); + panel.add(panelN,BorderLayout.NORTH); + + CardLayout cardLayout=new CardLayout(); + JPanel panelC=new JPanel(); + panelC.setLayout(cardLayout); + + JPanel panel0=new JPanel(); + panel0.setLayout(new GridLayout(6,4)); + JButton[] standredButton=new JButton[24]; + String str[]={"%","√","x²","1/x", + "CE","C","×","/", + "7","8","9","*", + "4","5","6","-", + "1","2","3","+", + "±","0",".","=" + }; + for(int i=0;i