From adf90502b226d5a7c2642d13284c3a7e0fd4dc9f Mon Sep 17 00:00:00 2001 From: 86135 <86135@LAPTOP-SK0LRVAH> Date: Fri, 4 Jun 2021 23:23:43 +0800 Subject: [PATCH 1/6] =?UTF-8?q?=E5=AE=8C=E6=88=90=E4=BA=86=E8=AE=A1?= =?UTF-8?q?=E7=AE=97=E5=99=A8=E5=9F=BA=E6=9C=AC=E6=A1=86=E6=9E=B6=E7=9A=84?= =?UTF-8?q?=E6=9E=84=E5=BB=BA=EF=BC=8C=E5=8D=B3=E5=AE=8C=E6=88=90=E4=BA=86?= =?UTF-8?q?=E8=AE=A1=E7=AE=97=E5=99=A8=E7=AA=97=E5=8F=A3=E7=9A=84=E6=9E=84?= =?UTF-8?q?=E5=BB=BA=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/java2020spring/BaseCalculator.java | 42 ++++++++++++++++++++++++++ src/java2020spring/StartUp.java | 8 +++++ 2 files changed, 50 insertions(+) create mode 100644 src/java2020spring/BaseCalculator.java create mode 100644 src/java2020spring/StartUp.java diff --git a/src/java2020spring/BaseCalculator.java b/src/java2020spring/BaseCalculator.java new file mode 100644 index 0000000..9c444b5 --- /dev/null +++ b/src/java2020spring/BaseCalculator.java @@ -0,0 +1,42 @@ +package java2020spring; + +import java.awt.*; +import java.awt.event.*; + +import javax.swing.*; + +public class BaseCalculator extends JFrame implements ActionListener{ + JTextField showArea; + JButton [] button=new JButton[24]; + String [] symbol= {"%","CE","C","Del", + "1/x","x²","√x","÷", + "7","8","9","×", + "4","5","6","-", + "1","2","3","+", + "±","0",".","="}; + JPanel p; + public BaseCalculator() { + setTitle("标准计算器"); + setBounds(100,100,300,400); + showArea=new JTextField(); + showArea.setPreferredSize(new Dimension(300,60)); + p=new JPanel(); + p.setLayout(new GridLayout(6,4)); + for(int i=0;i<24;i++) { + button[i]=new JButton(symbol[i]); + button[i].addActionListener(this); + button[i].setFont(new Font("Arial",Font.BOLD,18)); + p.add(button[i]); + } + add(showArea,BorderLayout.NORTH); + add(p); + setVisible(true); + setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + + } + public void actionPerformed(ActionEvent e) { + + } + + +} diff --git a/src/java2020spring/StartUp.java b/src/java2020spring/StartUp.java new file mode 100644 index 0000000..530ed4b --- /dev/null +++ b/src/java2020spring/StartUp.java @@ -0,0 +1,8 @@ +package java2020spring; + +public class StartUp { + public static void main(String args[]) { + BaseCalculator calculator=new BaseCalculator(); + } + +} -- Gitee From f7e3ef726240d259d7c4aac8625d0d8d0e9424c8 Mon Sep 17 00:00:00 2001 From: 86135 <86135@LAPTOP-SK0LRVAH> Date: Sat, 5 Jun 2021 23:36:10 +0800 Subject: [PATCH 2/6] =?UTF-8?q?=E4=B8=BA=E9=83=A8=E5=88=86=E6=8C=89?= =?UTF-8?q?=E9=94=AE=E5=88=9B=E5=BB=BA=E7=9B=91=E8=A7=86=E5=99=A8=EF=BC=8C?= =?UTF-8?q?=E4=BB=A5=E5=8F=8A=E5=AE=8C=E6=88=90=E4=BA=86=E8=A7=A6=E5=8F=91?= =?UTF-8?q?=E7=9B=91=E8=A7=86=E5=99=A8=E5=90=8E=E7=9A=84=E6=96=B9=E6=B3=95?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/java2020spring/BaseCalculator.java | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/java2020spring/BaseCalculator.java b/src/java2020spring/BaseCalculator.java index 9c444b5..9884f13 100644 --- a/src/java2020spring/BaseCalculator.java +++ b/src/java2020spring/BaseCalculator.java @@ -6,6 +6,7 @@ import java.awt.event.*; import javax.swing.*; public class BaseCalculator extends JFrame implements ActionListener{ + private double result=0; JTextField showArea; JButton [] button=new JButton[24]; String [] symbol= {"%","CE","C","Del", @@ -35,6 +36,25 @@ public class BaseCalculator extends JFrame implements ActionListener{ } public void actionPerformed(ActionEvent e) { + String text=e.getActionCommand(); + if(text.equals("CE")||text.equals("C")) { + showArea.setText(""); + } + else if(text.equals("1/x")) { + result=Double.parseDouble(text); + result=1/result; + showArea.setText(result+""); + } + else if(text.equals("x²")) { + result=Double.parseDouble(text); + result*=result; + showArea.setText(result+""); + } + else if(text.equals("√x")) { + result=Double.parseDouble(text); + result=Math.sqrt(result); + showArea.setText(result+""); + } } -- Gitee From ab78c62292ba87e7449af98361968e535cff69cd Mon Sep 17 00:00:00 2001 From: 86135 <86135@LAPTOP-SK0LRVAH> Date: Sat, 5 Jun 2021 23:43:59 +0800 Subject: [PATCH 3/6] =?UTF-8?q?=E5=AF=B9=E8=AE=A1=E7=AE=97=E5=99=A8?= =?UTF-8?q?=E4=B8=8A=E7=9A=84=E9=83=A8=E5=88=86=E6=8C=89=E9=92=AE=E5=88=9B?= =?UTF-8?q?=E5=BB=BA=E7=9B=91=E8=A7=86=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/java2020spring/BaseCalculator.java | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/java2020spring/BaseCalculator.java b/src/java2020spring/BaseCalculator.java index 9884f13..b5fdee7 100644 --- a/src/java2020spring/BaseCalculator.java +++ b/src/java2020spring/BaseCalculator.java @@ -7,6 +7,7 @@ import javax.swing.*; public class BaseCalculator extends JFrame implements ActionListener{ private double result=0; + private int count=0; JTextField showArea; JButton [] button=new JButton[24]; String [] symbol= {"%","CE","C","Del", @@ -55,7 +56,16 @@ public class BaseCalculator extends JFrame implements ActionListener{ result=Math.sqrt(result); showArea.setText(result+""); } - + else if(text.equals("±")) { + if(count==0) { + showArea.setText(showArea.getText()+"-"); + count=1; + } + else { + showArea.setText(showArea.getText()+"+"); + count=0; + } + } } -- Gitee From 62b6e8624066569f4f57ee0e464f35754a7d51e6 Mon Sep 17 00:00:00 2001 From: 86135 <86135@LAPTOP-SK0LRVAH> Date: Sun, 6 Jun 2021 23:36:48 +0800 Subject: [PATCH 4/6] =?UTF-8?q?=E8=BF=9B=E4=B8=80=E6=AD=A5=E5=AE=8C?= =?UTF-8?q?=E5=96=84=E4=BA=86=E6=8C=89=E9=92=AE=E7=9A=84=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/java2020spring/BaseCalculator.java | 105 ++++++++++++++++++------- 1 file changed, 78 insertions(+), 27 deletions(-) diff --git a/src/java2020spring/BaseCalculator.java b/src/java2020spring/BaseCalculator.java index b5fdee7..1cefa6b 100644 --- a/src/java2020spring/BaseCalculator.java +++ b/src/java2020spring/BaseCalculator.java @@ -2,12 +2,13 @@ package java2020spring; import java.awt.*; import java.awt.event.*; +import java.util.Stack; import javax.swing.*; public class BaseCalculator extends JFrame implements ActionListener{ - private double result=0; - private int count=0; + private double num=0; + private double num2=0; JTextField showArea; JButton [] button=new JButton[24]; String [] symbol= {"%","CE","C","Del", @@ -18,9 +19,17 @@ public class BaseCalculator extends JFrame implements ActionListener{ "±","0",".","="}; JPanel p; public BaseCalculator() { + init(); setTitle("标准计算器"); setBounds(100,100,300,400); + setVisible(true); + setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + } + + void init() { showArea=new JTextField(); + showArea.setHorizontalAlignment(JTextField.RIGHT); + showArea.setFont(new Font("Arial",Font.BOLD,18)); showArea.setPreferredSize(new Dimension(300,60)); p=new JPanel(); p.setLayout(new GridLayout(6,4)); @@ -32,41 +41,83 @@ public class BaseCalculator extends JFrame implements ActionListener{ } add(showArea,BorderLayout.NORTH); add(p); - setVisible(true); - setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); - } + public void actionPerformed(ActionEvent e) { + Stack numStack = new Stack(); + int count=0; String text=e.getActionCommand(); - if(text.equals("CE")||text.equals("C")) { + if(text.equals("CE")) { + showArea.setText(""); + } + if(text.equals("C")) { showArea.setText(""); + while(!numStack.isEmpty()) { + numStack.pop(); + } + } + if(text.equals("1/x")) { + num=Double.parseDouble(showArea.getText()); + if(num!=0) { + num=1/num; + showArea.setText(String.valueOf(num)); + } + else { + showArea.setText(""); + } + } + if(text.equals("x²")) { + num=Double.parseDouble(showArea.getText()); + num*=num; + showArea.setText(String.valueOf(num)); } - else if(text.equals("1/x")) { - result=Double.parseDouble(text); - result=1/result; - showArea.setText(result+""); + if(text.equals("√x")) { + num=Double.parseDouble(showArea.getText()); + if(num>=0) { + num=Math.sqrt(num); + showArea.setText(String.valueOf(num)); + } + else + showArea.setText(""); } - else if(text.equals("x²")) { - result=Double.parseDouble(text); - result*=result; - showArea.setText(result+""); + if(text.equals("±")) { + num=Double.parseDouble(showArea.getText()); + num*=(-1); + showArea.setText(String.valueOf(num)); } - else if(text.equals("√x")) { - result=Double.parseDouble(text); - result=Math.sqrt(result); - showArea.setText(result+""); + if(text.equals("%")) { + num=Double.parseDouble(showArea.getText()); + num*=0.01; + showArea.setText(String.valueOf(num)); } - else if(text.equals("±")) { - if(count==0) { - showArea.setText(showArea.getText()+"-"); - count=1; + if(text.equals("Del")) { + int length=showArea.getText().length(); + if(length==1) { + showArea.setText(""); } - else { - showArea.setText(showArea.getText()+"+"); - count=0; + else + showArea.setText(showArea.getText().substring(0,length-1)); + } + if(text.equals(".")) { + if(showArea.getText().equals("")||showArea.getText().equals("0")) { + showArea.setText("0."); + } + else if(showArea.getText().indexOf(".")==-1) { + showArea.setText(showArea.getText()+"."); } } - } + if(text.matches("[0-9]+")) { + showArea.setText(showArea.getText() + text); + } + String regex="[\\+\\-\\*\\/]"; + if(text.matches(regex)&&count==0) { + num=Double.parseDouble(showArea.getText()); + numStack.push(new Double(num)); + count++; + } + if(text.equals("+")) { + + } - + } } -- Gitee From 823d6e31bb2f93400fe069f91aa4adcc8eac600c Mon Sep 17 00:00:00 2001 From: 86135 <86135@LAPTOP-SK0LRVAH> Date: Mon, 7 Jun 2021 23:52:21 +0800 Subject: [PATCH 5/6] =?UTF-8?q?=E5=9F=BA=E6=9C=AC=E8=83=BD=E5=AE=9E?= =?UTF-8?q?=E7=8E=B0=E5=8A=A0=E5=87=8F=E4=B9=98=E9=99=A4=E7=9A=84=E8=BF=90?= =?UTF-8?q?=E7=AE=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/java2020spring/BaseCalculator.java | 92 ++++++++++++++++++++++---- 1 file changed, 78 insertions(+), 14 deletions(-) diff --git a/src/java2020spring/BaseCalculator.java b/src/java2020spring/BaseCalculator.java index 1cefa6b..18bf1c7 100644 --- a/src/java2020spring/BaseCalculator.java +++ b/src/java2020spring/BaseCalculator.java @@ -7,10 +7,13 @@ import java.util.Stack; import javax.swing.*; public class BaseCalculator extends JFrame implements ActionListener{ - private double num=0; - private double num2=0; + double result=0; + double num=0; + int count=0; + char oper=' '; JTextField showArea; JButton [] button=new JButton[24]; + Stack numStack = new Stack(); String [] symbol= {"%","CE","C","Del", "1/x","x²","√x","÷", "7","8","9","×", @@ -44,14 +47,13 @@ public class BaseCalculator extends JFrame implements ActionListener{ } public void actionPerformed(ActionEvent e) { - Stack numStack = new Stack(); - int count=0; String text=e.getActionCommand(); if(text.equals("CE")) { showArea.setText(""); } if(text.equals("C")) { showArea.setText(""); + count=0; while(!numStack.isEmpty()) { numStack.pop(); } @@ -72,8 +74,8 @@ public class BaseCalculator extends JFrame implements ActionListener{ showArea.setText(String.valueOf(num)); } if(text.equals("√x")) { - num=Double.parseDouble(showArea.getText()); if(num>=0) { + num=Double.parseDouble(showArea.getText()); num=Math.sqrt(num); showArea.setText(String.valueOf(num)); } @@ -107,17 +109,79 @@ public class BaseCalculator extends JFrame implements ActionListener{ } } if(text.matches("[0-9]+")) { - showArea.setText(showArea.getText() + text); + if(numStack.isEmpty()) { + showArea.setText(showArea.getText()+text); + } + else { + if(numStack.peek()==Double.parseDouble(showArea.getText())) { + showArea.setText(text); + } + else { + System.out.println(); + showArea.setText(showArea.getText()+text); + } + } } - String regex="[\\+\\-\\*\\/]"; - if(text.matches(regex)&&count==0) { - num=Double.parseDouble(showArea.getText()); - numStack.push(new Double(num)); - count++; + String regex="[\\+\\-\\×\\÷]"; + if(text.matches(regex)) { + if(numStack.isEmpty()&&count==0) { + num=Double.parseDouble(showArea.getText()); + numStack.push(num); + } + if(text.equals("+")) { + count++; + if(count>=2) { + calculate(); + numStack.push(result); + showArea.setText(String.valueOf(result)); + } + oper='+'; + } + if(text.equals("-")) { + count++; + if(count>=2) { + calculate(); + numStack.push(result); + showArea.setText(String.valueOf(result)); + } + oper='-'; + } + if(text.equals("×")) { + count++; + if(count>=2) { + calculate(); + numStack.push(result); + showArea.setText(String.valueOf(result)); + } + oper='*'; + } + if(text.equals("÷")) { + count++; + if(count>=2) { + calculate(); + numStack.push(result); + showArea.setText(String.valueOf(result)); + } + oper='/'; + } } - if(text.equals("+")) { - + if(text.equals("=")){ + calculate(); + count = 0; + oper=' '; + showArea.setText(String.valueOf(result)); } - + } + public double calculate() { + num=Double.parseDouble(showArea.getText()); + if(oper=='+') + result = numStack.pop() + num; + else if(oper=='-') + result = numStack.pop() - num; + else if(oper=='*') + result = numStack.pop() * num; + else if(oper=='/') + result = numStack.pop() / num; + return result; } } -- Gitee From bbae2a15c94954e22ef1682fb0741d9ddcbbca1c Mon Sep 17 00:00:00 2001 From: 86135 <86135@LAPTOP-SK0LRVAH> Date: Tue, 8 Jun 2021 20:49:17 +0800 Subject: [PATCH 6/6] =?UTF-8?q?=E5=AE=8C=E6=88=90=E4=BA=86=E6=A0=87?= =?UTF-8?q?=E5=87=86=E8=AE=A1=E7=AE=97=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/java2020spring/BaseCalculator.java | 194 +++++++++++++++++++------ 1 file changed, 146 insertions(+), 48 deletions(-) diff --git a/src/java2020spring/BaseCalculator.java b/src/java2020spring/BaseCalculator.java index 18bf1c7..f8d3b58 100644 --- a/src/java2020spring/BaseCalculator.java +++ b/src/java2020spring/BaseCalculator.java @@ -3,24 +3,42 @@ package java2020spring; import java.awt.*; import java.awt.event.*; import java.util.Stack; - import javax.swing.*; public class BaseCalculator extends JFrame implements ActionListener{ - double result=0; - double num=0; - int count=0; - char oper=' '; + + StringBuilder secondNum = new StringBuilder(); //存储运算符之后的数字 + + double result = 0; + + double num = 0; + + int count = 0; //统计运算符的个数 + + char oper = ' '; //用于对每个运算符做相应的标识 + + boolean M = false; //用于记录是否按下“M+”或“M-" + + double saveResult = 0; //用于记录通过按下“M+”或“M-”存储的数字 + JTextField showArea; - JButton [] button=new JButton[24]; - Stack numStack = new Stack(); - String [] symbol= {"%","CE","C","Del", - "1/x","x²","√x","÷", - "7","8","9","×", - "4","5","6","-", - "1","2","3","+", - "±","0",".","="}; + + JButton [] button = new JButton[28]; + + Stack numStack = new Stack(); //声明一个栈用于存储数字 + + Stack saveNum =new Stack(); //声明一个栈用于通过按下“M+”或“M-”存储的数字 + //计算器上的按钮的字符 + String [] symbol = {"MC","MR","M+","M-", + "%","CE","C","Del", + "1/x","x²","√x","÷", + "7","8","9","×", + "4","5","6","-", + "1","2","3","+", + "±","0",".","="}; + JPanel p; + public BaseCalculator() { init(); setTitle("标准计算器"); @@ -30,37 +48,50 @@ public class BaseCalculator extends JFrame implements ActionListener{ } void init() { - showArea=new JTextField(); - showArea.setHorizontalAlignment(JTextField.RIGHT); + showArea = new JTextField(); + showArea.setHorizontalAlignment(JTextField.RIGHT); //将文本框的光标置于右边 showArea.setFont(new Font("Arial",Font.BOLD,18)); - showArea.setPreferredSize(new Dimension(300,60)); - p=new JPanel(); - p.setLayout(new GridLayout(6,4)); - for(int i=0;i<24;i++) { - button[i]=new JButton(symbol[i]); + showArea.setPreferredSize(new Dimension(300,60)); //将文本框设置成合适大小 + add(showArea,BorderLayout.NORTH); + p = new JPanel(); + p.setLayout(new GridLayout(7,4)); //将p的布局设置为7行4列的GridLayout布局以便存放按钮 + //利用循环逐一设置每个按钮并注册监视器 + for(int i=0;i<28;i++) { + button[i] = new JButton(symbol[i]); button[i].addActionListener(this); button[i].setFont(new Font("Arial",Font.BOLD,18)); p.add(button[i]); } - add(showArea,BorderLayout.NORTH); add(p); } public void actionPerformed(ActionEvent e) { - String text=e.getActionCommand(); + String text=e.getActionCommand(); //记录按钮上的命令字符 + //按下“CE”按钮时 if(text.equals("CE")) { - showArea.setText(""); + //若缓冲区有数字则将要其清空 + if (secondNum.length() > 0) { + secondNum.delete(0, secondNum.length()); + } + showArea.setText(""); //同时将当前文本框清空 } + //按下“C”按钮时,将一切恢复至初始状态 if(text.equals("C")) { + if (secondNum.length() > 0) { + secondNum.delete(0, secondNum.length()); + } showArea.setText(""); count=0; + //清空栈内的数字 while(!numStack.isEmpty()) { numStack.pop(); } } + //按下“1/x”按钮时 if(text.equals("1/x")) { - num=Double.parseDouble(showArea.getText()); - if(num!=0) { + num=Double.parseDouble(showArea.getText()); //将文本框内的字符串转化成浮点数 + //满足“分母不能为0”的条件 + if(num!=0) { num=1/num; showArea.setText(String.valueOf(num)); } @@ -68,75 +99,99 @@ public class BaseCalculator extends JFrame implements ActionListener{ showArea.setText(""); } } + //按下“x²”按钮时 if(text.equals("x²")) { - num=Double.parseDouble(showArea.getText()); + num = Double.parseDouble(showArea.getText()); num*=num; showArea.setText(String.valueOf(num)); } + //按下“√x”按钮时 if(text.equals("√x")) { if(num>=0) { - num=Double.parseDouble(showArea.getText()); - num=Math.sqrt(num); + num = Double.parseDouble(showArea.getText()); + num = Math.sqrt(num); showArea.setText(String.valueOf(num)); } else showArea.setText(""); } + //按下“±”按钮时 if(text.equals("±")) { - num=Double.parseDouble(showArea.getText()); + num = Double.parseDouble(showArea.getText()); num*=(-1); showArea.setText(String.valueOf(num)); } + //按下“%”按钮时 if(text.equals("%")) { - num=Double.parseDouble(showArea.getText()); + num = Double.parseDouble(showArea.getText()); num*=0.01; showArea.setText(String.valueOf(num)); } + //按下“Del”按钮时,即是退格 if(text.equals("Del")) { - int length=showArea.getText().length(); + int length = showArea.getText().length(); if(length==1) { showArea.setText(""); + if (secondNum.length() > 0) { + secondNum.delete(0, secondNum.length()); + } } - else + else { showArea.setText(showArea.getText().substring(0,length-1)); + if(secondNum.length()>0) { + secondNum.delete(secondNum.length()-1,secondNum.length()); + } + } } + //按下“.”按钮时 if(text.equals(".")) { if(showArea.getText().equals("")||showArea.getText().equals("0")) { showArea.setText("0."); } else if(showArea.getText().indexOf(".")==-1) { showArea.setText(showArea.getText()+"."); + secondNum.append(text); } } - if(text.matches("[0-9]+")) { + //按下数字按钮时 + if(text.matches("[0-9]")) { + // 判断是否为第一个数 if(numStack.isEmpty()) { showArea.setText(showArea.getText()+text); } + // 如果是运算符之后的数字 else { - if(numStack.peek()==Double.parseDouble(showArea.getText())) { - showArea.setText(text); - } - else { - System.out.println(); - showArea.setText(showArea.getText()+text); - } + // 先将该数字添加到缓冲区 + secondNum.append(text); + // 再写入文本框 + showArea.setText(secondNum.toString()); } } + //按下运算符按钮时 String regex="[\\+\\-\\×\\÷]"; if(text.matches(regex)) { - if(numStack.isEmpty()&&count==0) { + // 按下运算符时清空缓存区,方便继续存储按下运算符之后的数字 + if (secondNum.length() > 0) { + secondNum.delete(0, secondNum.length()); + } + //如果是第一次按下运算符键 + if(numStack.isEmpty() && count == 0) { num=Double.parseDouble(showArea.getText()); - numStack.push(num); + numStack.push(num); //将输入的第一个数字先压入栈内 } + //按下“+”按钮时 if(text.equals("+")) { - count++; - if(count>=2) { + count++; //每一次按下运算符都会进行计数 + //当按下运算符的次数多于等于2次时,总先将此运算符前的两个数做运算 + if(count>=2) { calculate(); numStack.push(result); showArea.setText(String.valueOf(result)); } - oper='+'; + //对此运算符做标记,若在这之后再按运算符即可做出相应的运算 + oper='+'; } + //按下“-”按钮时 if(text.equals("-")) { count++; if(count>=2) { @@ -146,6 +201,7 @@ public class BaseCalculator extends JFrame implements ActionListener{ } oper='-'; } + //按下“×”按钮时 if(text.equals("×")) { count++; if(count>=2) { @@ -155,6 +211,7 @@ public class BaseCalculator extends JFrame implements ActionListener{ } oper='*'; } + //按下“÷"按钮时 if(text.equals("÷")) { count++; if(count>=2) { @@ -165,13 +222,54 @@ public class BaseCalculator extends JFrame implements ActionListener{ oper='/'; } } + //按下“=”按钮时 if(text.equals("=")){ - calculate(); - count = 0; - oper=' '; + calculate(); //计算最后两个数 + count = 0; //并将按下运算符的次数清空 + oper=' '; showArea.setText(String.valueOf(result)); } + //MC或MR事件的执行必须建立在用户按下了M+或M-按钮的前提下 + //按下“MC”按钮时,将存储起来的栈清空,并将一切初始化 + if(text.equals("MC")&&M) { + while(!saveNum.isEmpty()) { + saveNum.pop(); + } + M = false; + saveResult = 0; + } + //按下“MR”按钮时 + if(text.equals("MR")&&M) { + saveResult = saveNum.pop(); + showArea.setText(String.valueOf(saveResult)); + } + //按下“M+”按钮时 + if(text.equals("M+")) { + num = Double.parseDouble(showArea.getText()); + if(saveNum.isEmpty()){ + saveNum.push(num); + } + else{ + saveResult = num + saveNum.pop(); + saveNum.push(saveResult); + } + M = true; + } + //按下“M-”按钮时 + if(text.equals("M-")) { + num = Double.parseDouble(showArea.getText()); + if(saveNum.isEmpty()){ + saveResult = (-1) * num; + saveNum.push(saveResult); + } + else{ + saveResult = saveNum.pop() - num; + saveNum.push(saveResult); + } + M = true; + } } + //对已标记的运算符做相应的运算 public double calculate() { num=Double.parseDouble(showArea.getText()); if(oper=='+') -- Gitee