From 24b783807393d105f7e5ffcb676606dcc9718a00 Mon Sep 17 00:00:00 2001 From: min Date: Fri, 27 May 2022 23:53:12 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E7=AC=AC=E4=B8=80=E6=AC=A1=E6=8F=90?= =?UTF-8?q?=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../CalculatorFrame.java" | 144 ++++++++++++++++++ 1 file changed, 144 insertions(+) create mode 100644 "src/\350\256\241\347\256\227\345\231\250/CalculatorFrame.java" diff --git "a/src/\350\256\241\347\256\227\345\231\250/CalculatorFrame.java" "b/src/\350\256\241\347\256\227\345\231\250/CalculatorFrame.java" new file mode 100644 index 0000000..88b819c --- /dev/null +++ "b/src/\350\256\241\347\256\227\345\231\250/CalculatorFrame.java" @@ -0,0 +1,144 @@ +package 计算器; +import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; + +import javax.swing.*; +public class CalculatorFrame extends JFrame implements ActionListener{ + JTextArea text=new JTextArea("",5,30); + JTextArea text1=new JTextArea("",5,30); + String num1=null; + String num2=null; + String ope=null; + String result=null; + + public static void main(String args[]) { + CalculatorFrame calculator=new CalculatorFrame(); + calculator.init(); + } + public void init() { + JPanel p0, p1,p2,p3,p4; + p1=new JPanel(); + p1.setBackground(new Color(250,255,240)); + + JFrame window=new JFrame("计算器"); + Container con=window.getContentPane(); + window.setVisible(true); + window.setBounds(500,100,400,500); + window.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); + window.setLayout(new BorderLayout()); + window.add(p1,BorderLayout.NORTH); + p1.add(text,BorderLayout.CENTER); + p1.add(text1,BorderLayout.NORTH); + text.setBounds(500, 500, 400, 10); + text.setBackground(new Color(250,255,240)); + text1.setBounds(500, 100, 400, 20); + text.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT); + text1.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT); + p0=new JPanel(); + p2=new JPanel(); + p3=new JPanel(); + p4=new JPanel(); + p0.setLayout(new BorderLayout()); + p0.setBackground(new Color(240, 255, 240)); + p2.setLayout( new GridLayout(5,4)); + p3.setLayout( new GridLayout(2,4)); + p4.setLayout( new GridLayout(5,1)); + window.add(p0,BorderLayout.CENTER); + p0.add(p3,BorderLayout.NORTH ); + p0.add(p2,BorderLayout.CENTER ); + p0.add(p4,BorderLayout.WEST); + String btn_text="%÷C⇐789×456-123+e0.="; + String north[]= {"sin","cos","tan","xⁿ","lg","ln","(",")"}; + String west[]= {"³√x","√x","x!","¹/x","Π"}; + p2.setBackground(new Color(240, 255, 240)); + for(int i=0;i<20;i++) { + String temp=btn_text.substring(i,i+1); + JButton btn=new JButton(); + p2.add(btn); + btn.setText(temp); + btn.addActionListener(this); + btn.setSize(1,1); + btn.setBackground(new Color(250,255,240)); + btn.setFont(new Font("宋体",Font.BOLD,15)); + if(temp.equals("=")||temp.equals("C")||temp.equals("⇐")) + btn.setFont(new Font("粗体",Font.BOLD,20)); + } + for(int i=0;i<8;i++) { + JButton btn=new JButton(north[i]); + p3.add(btn); + btn.setSize(3,2); + btn.addActionListener(this); + btn.setBackground(new Color(250,255,240)); + } + for(int i=0;i<5;i++) { + JButton btn=new JButton(west[i]); + p4.add(btn); + btn.setSize(2,2); + btn.addActionListener(this); + btn.setFont(new Font("宋体",Font.BOLD,20)); + btn.setBackground(new Color(250,255,240)); + } + + } + public String calculate(String ope,String a,String b) { + double n=Double.valueOf(a); + double m=Double.valueOf(b); + if(ope.equals("+")) result=(n+m)+""; + else if(ope.equals("-"))result=(n-m)+""; + else if(ope.equals("×"))result=(n*m)+""; + else if(ope.equals("÷"))if(m!=0)result=(n/m)+""; + return result; + } + + @Override + public void actionPerformed(ActionEvent e) { + // TODO Auto-generated method stub + if(".0123456789".indexOf(e.getActionCommand())!=-1) + {text.setText(text.getText()+e.getActionCommand()); + text.setFont(new Font("monospaced", Font.PLAIN, 20));} + else if(e.getActionCommand().matches("⇐")) { + String str=text.getText(); + str=str.substring(0,str.length()-1); + text.setText(str); + } + + else if(e.getActionCommand().matches("[×÷+-]{1}")) + {ope=e.getActionCommand(); + text1.setText(text.getText()); + num1=text.getText(); + text.setText(""); + } + else if(e.getActionCommand().matches("+")) { + num1=text.getText(); + ope="+"; + text1.setText(num1+ope); + text.setText(""); + num2=text.getText(); + String a=calculate(ope,num1,num2); + + } + else if(e.getActionCommand().equals("=")) { + double a=Double.valueOf(num1); + double b=Double.valueOf(text.getText()); + double result=0; + switch(ope) { + case"+":result=a+b;break; + case"-":result=a-b;break; + case"×":result=a*b;break; + case"÷":if(b!=0) result=a/b;break; + } + + text.setText(String.valueOf(result).toString()); + } + else if(e.getActionCommand().equals("%")) { + double a=Double.valueOf(num1); + double result=0.0; + result=a/100; + text.setText(String.valueOf(result)); + } + else if(e.getActionCommand().equals("C")) { + text.setText(""); + text1.setText(""); + } + }} -- Gitee From 67cc1dcaa69dd92e782d37b50923929bbf394e88 Mon Sep 17 00:00:00 2001 From: min Date: Sun, 5 Jun 2022 19:20:15 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E7=AC=AC=E4=BA=8C=E6=AC=A1=E6=8F=90?= =?UTF-8?q?=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../CalculatorFrame.java" | 285 ++++++++++++++---- 1 file changed, 224 insertions(+), 61 deletions(-) diff --git "a/src/\350\256\241\347\256\227\345\231\250/CalculatorFrame.java" "b/src/\350\256\241\347\256\227\345\231\250/CalculatorFrame.java" index 88b819c..ce30016 100644 --- "a/src/\350\256\241\347\256\227\345\231\250/CalculatorFrame.java" +++ "b/src/\350\256\241\347\256\227\345\231\250/CalculatorFrame.java" @@ -2,25 +2,26 @@ package 计算器; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; - +import java.util.*; import javax.swing.*; public class CalculatorFrame extends JFrame implements ActionListener{ - JTextArea text=new JTextArea("",5,30); - JTextArea text1=new JTextArea("",5,30); - String num1=null; - String num2=null; - String ope=null; - String result=null; - + JTextArea text=new JTextArea("",5,30);//输入框 + JTextArea text1=new JTextArea("",5,30);//显示框 + String num1="";//运算数1 + String num2="";//运算数2 + String ope="";//运算符 + String num3=""; + String result="";//结果 +double n,m,r,flag=0;; public static void main(String args[]) { CalculatorFrame calculator=new CalculatorFrame(); calculator.init(); } public void init() { JPanel p0, p1,p2,p3,p4; - p1=new JPanel(); - p1.setBackground(new Color(250,255,240)); - + p1=new JPanel(); //放置文本框的面板 + p1.setLayout(new BorderLayout()); + p1.setBackground(new Color(250,255,240)); JFrame window=new JFrame("计算器"); Container con=window.getContentPane(); window.setVisible(true); @@ -33,12 +34,12 @@ public class CalculatorFrame extends JFrame implements ActionListener{ text.setBounds(500, 500, 400, 10); text.setBackground(new Color(250,255,240)); text1.setBounds(500, 100, 400, 20); - text.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT); - text1.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT); - p0=new JPanel(); - p2=new JPanel(); - p3=new JPanel(); - p4=new JPanel(); + text1.setBackground(new Color(250,255,240)); + + p0=new JPanel();//主面板 + p2=new JPanel();//中部按钮面板 + p3=new JPanel();//北部按钮的面板 + p4=new JPanel();//西部按钮的面板 p0.setLayout(new BorderLayout()); p0.setBackground(new Color(240, 255, 240)); p2.setLayout( new GridLayout(5,4)); @@ -49,7 +50,7 @@ public class CalculatorFrame extends JFrame implements ActionListener{ p0.add(p2,BorderLayout.CENTER ); p0.add(p4,BorderLayout.WEST); String btn_text="%÷C⇐789×456-123+e0.="; - String north[]= {"sin","cos","tan","xⁿ","lg","ln","(",")"}; + String north[]= {"sin","cos","tan","x²","xⁿ","lg","ln","±"}; String west[]= {"³√x","√x","x!","¹/x","Π"}; p2.setBackground(new Color(240, 255, 240)); for(int i=0;i<20;i++) { @@ -81,64 +82,226 @@ public class CalculatorFrame extends JFrame implements ActionListener{ } } - public String calculate(String ope,String a,String b) { - double n=Double.valueOf(a); - double m=Double.valueOf(b); - if(ope.equals("+")) result=(n+m)+""; - else if(ope.equals("-"))result=(n-m)+""; - else if(ope.equals("×"))result=(n*m)+""; - else if(ope.equals("÷"))if(m!=0)result=(n/m)+""; - return result; - } + @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub if(".0123456789".indexOf(e.getActionCommand())!=-1) - {text.setText(text.getText()+e.getActionCommand()); + { + num1=num1+e.getActionCommand(); + text.setText(num1); text.setFont(new Font("monospaced", Font.PLAIN, 20));} + else if(e.getActionCommand().matches("⇐")) { - String str=text.getText(); - str=str.substring(0,str.length()-1); - text.setText(str); + + num1=num1.substring(0,num1.length()-1); + text.setText(num1); } - else if(e.getActionCommand().matches("[×÷+-]{1}")) - {ope=e.getActionCommand(); - text1.setText(text.getText()); - num1=text.getText(); - text.setText(""); + {ope=e.getActionCommand(); + num2=num2+num1+ope; + text1.setText(num2); + num1=""; + num3=""; + text.setText(num3); + } + else if(e.getActionCommand().matches("³√x")) { + m=Double.parseDouble(num1); + n=Math.cbrt(m); + num1=n+""; + text1.setText(num1); + } + else if(e.getActionCommand().matches("√x")) { + m=Double.parseDouble(num1); + n=Math.sqrt(m); + num1=""+n; + text1.setText(num1); + } + else if(e.getActionCommand().matches("x!")) { + m=Double.parseDouble(num1); + if(m>=0) {//0的阶乘为1 + n=1; + for(int i=1;i<=m;i++) n=n*i; + num1=n+""; + text1.setText(num1); + }} + else if(e.getActionCommand().matches("¹/x")) { + if(num1=="0")text1.setText("除数不能为0"); + else if(Double.parseDouble(num1)!=0) { + m=Double.parseDouble(num1); + n=1/m; + num1=""+n; + text1.setText(num1); } - else if(e.getActionCommand().matches("+")) { - num1=text.getText(); - ope="+"; - text1.setText(num1+ope); - text.setText(""); - num2=text.getText(); - String a=calculate(ope,num1,num2); - + } + else if(e.getActionCommand().matches("sin")) { + m=Double.parseDouble(num1); + n=Math.sin(m); + num1=n+""; + text1.setText(num1); + } + else if(e.getActionCommand().matches("cos")) { + m=Double.parseDouble(num1); + n=Math.cos(m); + num1=n+""; + text1.setText(num1); + } + else if(e.getActionCommand().matches("tan")) { + m=Double.parseDouble(num1); + n=Math.tan(m); + num1=n+""; + text1.setText(num1); + } + else if(e.getActionCommand().matches("xⁿ")) { + ope="^"; + num2=num1+ope; + m=Double.parseDouble(num1); + text1.setText(num2); + num1=""; + text.setText(num3); + flag=1; + } + else if(e.getActionCommand().matches("=")&&flag==1) { + n=Double.parseDouble(num1); + r=Math.pow(m, n); + text1.setText(num2+n+"="); + text.setText(r+""); + + } + else if(e.getActionCommand().matches("lg")) { + ope="lg"; + num2=ope+"("; + text1.setText(num2); + flag=2; + } + else if(e.getActionCommand().matches("=")&&flag==2) { + n=Double.parseDouble(num1); + if(n>0) { + r=Math.log10(n); + text1.setText(num2+n+"="); + text.setText(r+""); + } + else text1.setText("请输入>0的数"); + } + else if(e.getActionCommand().matches("ln")) { + ope="ln"; + num2=ope+"("; + text1.setText(num2); + flag=3; + } + else if(e.getActionCommand().matches("=")&&flag==3) { + n=Double.parseDouble(num1); + if(n>0) { + r=Math.exp(n); + text1.setText(num2+n+"="); + text.setText(r+""); + } + else text1.setText("请输入>0的数"); + } + else if(e.getActionCommand().matches("x²")) { + m=Double.parseDouble(num1); + n=m*m; + num1=""+n; + text1.setText(num1); + } + else if(e.getActionCommand().matches("±")) { + n=Double.parseDouble(num1); + n=-n; + result=n+""; + text.setText(result); + result=""; } else if(e.getActionCommand().equals("=")) { - double a=Double.valueOf(num1); - double b=Double.valueOf(text.getText()); - double result=0; - switch(ope) { - case"+":result=a+b;break; - case"-":result=a-b;break; - case"×":result=a*b;break; - case"÷":if(b!=0) result=a/b;break; - } - - text.setText(String.valueOf(result).toString()); + text1.setText(text1.getText()+text.getText()); + Scanner scanner=new Scanner(text1.getText()); + num2=saveNumberAndCalculator(scanner.next()); + text.setText(num2); } else if(e.getActionCommand().equals("%")) { - double a=Double.valueOf(num1); - double result=0.0; - result=a/100; - text.setText(String.valueOf(result)); + m=Double.parseDouble(num1); + n=m/100; + num1=""+n; + text1.setText(num1); } else if(e.getActionCommand().equals("C")) { - text.setText(""); - text1.setText(""); + num1=""; + num2=""; + text.setText(num2); + text1.setText(num1); + } + else if(e.getActionCommand().equals("e")) { + num1="2.718281828"; + text.setText(num1); + } + else if(e.getActionCommand().equals("Π")) { + num1="3.141592653"; + text.setText(num1); + } } + private String saveNumberAndCalculator(String str) { + if(str.startsWith("-")) { + StringBuffer s1=new StringBuffer(str); + s1.insert(0, "0"); + str=s1.toString(); + } + //加上“#”用于获取分割最后一个数字 + str=str+"#"; + char[]strChar=str.toCharArray(); + LinkedListfuhaolist=new LinkedList<>();//存储符号的列表 + LinkedListnumberlist=new LinkedList<>();//存储数字的列表 + StringBuffer buffer=new StringBuffer(); + for(char fuhao:strChar) { + if(fuhao=='+'||fuhao=='-'||fuhao=='×'||fuhao=='÷') { + fuhaolist.add(String.valueOf(fuhao)); + numberlist.add(buffer.toString()); + buffer.delete(0, buffer.length()); + }//判断是不是最后一个数,是的话加到数字列表里 + else if(fuhao=='#') { + numberlist.add(buffer.toString()); + }else { + buffer.append(fuhao); + } + } + return calculateOrder(fuhaolist,numberlist); + }//加减乘除优先级 + private String calculateOrder(LinkedList calculate, LinkedList number) { + if(calculate.size()>0){ + int multiply=calculate.indexOf("×"); + int except=calculate.indexOf("÷"); + if((multiply!=-1&&except!=-1&&multiply0) { + calculateResult(calculate.get(0),calculate,number); + } + } + return number.get(0);//返回最终链表的第一个元素即结果 + } + //通过location找到运算符的位置,并根据位置获得number中对应符号前后的位置 + private String calculateResult(String location, LinkedList calculate, LinkedList number) { + // TODO Auto-generated method stub + int position=calculate.indexOf(location); + double a=Double.parseDouble(number.get(position+1)); + double b=Double.parseDouble(number.get(position)); + String calculateNumber=""; + switch(location) { + + case"×":calculateNumber=String.valueOf(a*b); break; + case"÷": + if(b!=0)calculateNumber=String.valueOf(a/b); + else text1.setText("除数不能为0");break; + case"+":calculateNumber=String.valueOf(a+b); break; + case"-":calculateNumber=String.valueOf(a-b); break; + + } + number.set(position,calculateNumber);//两个数算完把结果给前一个数字 + calculate.remove(position);//在calculate中每算完一个一个符号就删掉一个符号 + number.remove(position+1);//在number中两个数算完后删掉后面那个数 + return calculateOrder(calculate,number);//一直算到没有符号为止 }} + + -- Gitee From 7699fcbdcd20a2faf13222d83b649fc3e1e1fe8c Mon Sep 17 00:00:00 2001 From: min Date: Sun, 5 Jun 2022 21:25:35 +0800 Subject: [PATCH 3/4] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E4=B8=80=E4=B8=AA?= =?UTF-8?q?=E7=95=8C=E9=9D=A2=EF=BC=8C=E4=BD=BF=E7=95=8C=E9=9D=A2=E8=83=BD?= =?UTF-8?q?=E5=A4=9F=E8=BD=AC=E6=8D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../CalculatorFrame.java" | 33 ++-- .../Standard.java" | 181 ++++++++++++++++++ 2 files changed, 200 insertions(+), 14 deletions(-) create mode 100644 "src/\350\256\241\347\256\227\345\231\250/Standard.java" diff --git "a/src/\350\256\241\347\256\227\345\231\250/CalculatorFrame.java" "b/src/\350\256\241\347\256\227\345\231\250/CalculatorFrame.java" index ce30016..0450c46 100644 --- "a/src/\350\256\241\347\256\227\345\231\250/CalculatorFrame.java" +++ "b/src/\350\256\241\347\256\227\345\231\250/CalculatorFrame.java" @@ -13,16 +13,13 @@ public class CalculatorFrame extends JFrame implements ActionListener{ String num3=""; String result="";//结果 double n,m,r,flag=0;; - public static void main(String args[]) { - CalculatorFrame calculator=new CalculatorFrame(); - calculator.init(); - } - public void init() { - JPanel p0, p1,p2,p3,p4; + + public CalculatorFrame() { + JPanel p0, p1,p2,p3,p4; p1=new JPanel(); //放置文本框的面板 p1.setLayout(new BorderLayout()); p1.setBackground(new Color(250,255,240)); - JFrame window=new JFrame("计算器"); + JFrame window=new JFrame("科学计算器"); Container con=window.getContentPane(); window.setVisible(true); window.setBounds(500,100,400,500); @@ -31,9 +28,9 @@ double n,m,r,flag=0;; window.add(p1,BorderLayout.NORTH); p1.add(text,BorderLayout.CENTER); p1.add(text1,BorderLayout.NORTH); - text.setBounds(500, 500, 400, 10); + text.setBounds(500, 500, 400, 5); text.setBackground(new Color(250,255,240)); - text1.setBounds(500, 100, 400, 20); + text1.setBounds(500, 100, 400, 10); text1.setBackground(new Color(250,255,240)); p0=new JPanel();//主面板 @@ -43,14 +40,14 @@ double n,m,r,flag=0;; p0.setLayout(new BorderLayout()); p0.setBackground(new Color(240, 255, 240)); p2.setLayout( new GridLayout(5,4)); - p3.setLayout( new GridLayout(2,4)); + p3.setLayout( new GridLayout(3,4)); p4.setLayout( new GridLayout(5,1)); window.add(p0,BorderLayout.CENTER); p0.add(p3,BorderLayout.NORTH ); p0.add(p2,BorderLayout.CENTER ); p0.add(p4,BorderLayout.WEST); String btn_text="%÷C⇐789×456-123+e0.="; - String north[]= {"sin","cos","tan","x²","xⁿ","lg","ln","±"}; + String north[]= {"change","sin","cos","tan","x²","xⁿ","lg","ln","±"}; String west[]= {"³√x","√x","x!","¹/x","Π"}; p2.setBackground(new Color(240, 255, 240)); for(int i=0;i<20;i++) { @@ -65,12 +62,18 @@ double n,m,r,flag=0;; if(temp.equals("=")||temp.equals("C")||temp.equals("⇐")) btn.setFont(new Font("粗体",Font.BOLD,20)); } - for(int i=0;i<8;i++) { + for(int i=0;i<9;i++) { JButton btn=new JButton(north[i]); p3.add(btn); btn.setSize(3,2); - btn.addActionListener(this); + btn.addActionListener(this);{ + } btn.setBackground(new Color(250,255,240)); + if(north[i]=="change") + btn.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + new Standard(); + }}); } for(int i=0;i<5;i++) { JButton btn=new JButton(west[i]); @@ -91,7 +94,8 @@ double n,m,r,flag=0;; { num1=num1+e.getActionCommand(); text.setText(num1); - text.setFont(new Font("monospaced", Font.PLAIN, 20));} + text.setFont(new Font("monospaced", Font.PLAIN, 20)); + text1.setFont(new Font("monospaced", Font.PLAIN, 15));} else if(e.getActionCommand().matches("⇐")) { @@ -238,6 +242,7 @@ double n,m,r,flag=0;; num1="3.141592653"; text.setText(num1); } + } private String saveNumberAndCalculator(String str) { if(str.startsWith("-")) { diff --git "a/src/\350\256\241\347\256\227\345\231\250/Standard.java" "b/src/\350\256\241\347\256\227\345\231\250/Standard.java" new file mode 100644 index 0000000..c94ae44 --- /dev/null +++ "b/src/\350\256\241\347\256\227\345\231\250/Standard.java" @@ -0,0 +1,181 @@ +package 计算器; +import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.util.*; +import javax.swing.*; +public class Standard extends JFrame implements ActionListener{ + JTextArea text=new JTextArea("",5,30);//输入框 + JTextArea text1=new JTextArea("",5,30);//显示框 + String num1="";//运算数1 + String num2="";//运算数2 + String ope="";//运算符 + String num3=""; + String result="";//结果 +double n,m,r,flag=0; +public static void main(String args[]) { + Standard calculator1=new Standard(); +} +public Standard() { + JPanel p0, p1,p2,p3,p4; +p1=new JPanel(); //放置文本框的面板 +p1.setLayout(new BorderLayout()); + p1.setBackground(new Color(250,255,240)); + JFrame window=new JFrame("标准计算器"); + Container con=window.getContentPane(); + window.setVisible(true); + window.setBounds(500,100,400,500); + window.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); + window.setLayout(new BorderLayout()); + window.add(p1,BorderLayout.NORTH); + p1.add(text,BorderLayout.CENTER); + p1.add(text1,BorderLayout.NORTH); + text.setBounds(500, 500, 400, 5); + text.setBackground(new Color(250,255,240)); + text1.setBounds(500, 100, 400, 5); + text1.setBackground(new Color(250,255,240)); + + p0=new JPanel();//主面板 +p2=new JPanel();//中部按钮面板 +p3=new JPanel();//北部按钮的面板 +p0.setLayout(new BorderLayout()); +p0.setBackground(new Color(240, 255, 240)); +p2.setLayout( new GridLayout(5,4)); +p3.setLayout( new GridLayout(1,1)); +window.add(p0,BorderLayout.CENTER); +p0.add(p3,BorderLayout.NORTH ); +p0.add(p2,BorderLayout.CENTER ); +String btn_text="%÷C⇐789×456-123+e0.="; +String btn2[]= {"change"}; + p2.setBackground(new Color(240, 255, 240)); + for(int i=0;i<20;i++) { + String temp=btn_text.substring(i,i+1); + JButton btn=new JButton(); + p2.add(btn); + btn.setText(temp); + btn.addActionListener(this); + btn.setSize(1,1); + btn.setBackground(new Color(250,255,240)); + btn.setFont(new Font("宋体",Font.BOLD,15)); + if(temp.equals("=")||temp.equals("C")||temp.equals("⇐")) + btn.setFont(new Font("粗体",Font.BOLD,20)); + } + for(int i=0;i<1;i++) { + JButton btn=new JButton(btn2[i]); + p3.add(btn); + btn.setSize(3,2); + btn.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + new CalculatorFrame(); + }}); + btn.setBackground(new Color(250,255,240));}} +@Override +public void actionPerformed(ActionEvent e) { +// TODO Auto-generated method stub +if(".0123456789".indexOf(e.getActionCommand())!=-1) +{ +num1=num1+e.getActionCommand(); +text.setText(num1); +text.setFont(new Font("monospaced", Font.PLAIN, 20)); +text1.setFont(new Font("monospaced", Font.PLAIN, 15));} + +else if(e.getActionCommand().matches("⇐")) { + +num1=num1.substring(0,num1.length()-1); +text.setText(num1); +} +else if(e.getActionCommand().matches("[×÷+-]{1}")) +{ope=e.getActionCommand(); +num2=num2+num1+ope; +text1.setText(num2); +num1=""; +num3=""; +text.setText(num3); +} + +else if(e.getActionCommand().equals("=")) { +text1.setText(text1.getText()+text.getText()); +Scanner scanner=new Scanner(text1.getText()); +num2=saveNumberAndCalculator(scanner.next()); +text.setText(num2); +} +else if(e.getActionCommand().equals("%")) { + m=Double.parseDouble(num1); + n=m/100; + num1=""+n; + text1.setText(num1); +} +else if(e.getActionCommand().equals("C")) { +num1=""; +num2=""; +text.setText(num2); +text1.setText(num1);} + +} +private String saveNumberAndCalculator(String str) { + if(str.startsWith("-")) { + StringBuffer s1=new StringBuffer(str); + s1.insert(0, "0"); + str=s1.toString(); + } + //加上“#”用于获取分割最后一个数字 + str=str+"#"; + char[]strChar=str.toCharArray(); + LinkedListfuhaolist=new LinkedList<>();//存储符号的列表 + LinkedListnumberlist=new LinkedList<>();//存储数字的列表 + StringBuffer buffer=new StringBuffer(); + for(char fuhao:strChar) { + if(fuhao=='+'||fuhao=='-'||fuhao=='×'||fuhao=='÷') { + fuhaolist.add(String.valueOf(fuhao)); + numberlist.add(buffer.toString()); + buffer.delete(0, buffer.length()); + }//判断是不是最后一个数,是的话加到数字列表里 + else if(fuhao=='#') { + numberlist.add(buffer.toString()); + }else { + buffer.append(fuhao); + } + } + return calculateOrder(fuhaolist,numberlist); + }//加减乘除优先级 +private String calculateOrder(LinkedList calculate, LinkedList number) { +if(calculate.size()>0){ +int multiply=calculate.indexOf("×"); +int except=calculate.indexOf("÷"); +if((multiply!=-1&&except!=-1&&multiply0) { +calculateResult(calculate.get(0),calculate,number); +} +} +return number.get(0);//返回最终链表的第一个元素即结果 +} +//通过location找到运算符的位置,并根据位置获得number中对应符号前后的位置 +private String calculateResult(String location, LinkedList calculate, LinkedList number) { +// TODO Auto-generated method stub +int position=calculate.indexOf(location); +double a=Double.parseDouble(number.get(position+1)); +double b=Double.parseDouble(number.get(position)); +String calculateNumber=""; +switch(location) { + +case"×":calculateNumber=String.valueOf(a*b); break; +case"÷": + if(b!=0)calculateNumber=String.valueOf(a/b); + else text1.setText("除数不能为0");break; +case"+":calculateNumber=String.valueOf(a+b); break; +case"-":calculateNumber=String.valueOf(a-b); break; + +} +number.set(position,calculateNumber);//两个数算完把结果给前一个数字 +calculate.remove(position);//在calculate中每算完一个一个符号就删掉一个符号 +number.remove(position+1);//在number中两个数算完后删掉后面那个数 +return calculateOrder(calculate,number);//一直算到没有符号为止 +}} + + + -- Gitee From 74cb4d3de37e58761ba06d86eb27e840a0148a4e Mon Sep 17 00:00:00 2001 From: min Date: Thu, 9 Jun 2022 21:41:47 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=E8=AF=BE=E7=A8=8B=E8=AE=BE=E8=AE=A1?= =?UTF-8?q?=E5=B7=B2=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../CalculatorFrame.java" | 13 ++++++++----- .../Standard.java" | 10 +++++++--- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git "a/src/\350\256\241\347\256\227\345\231\250/CalculatorFrame.java" "b/src/\350\256\241\347\256\227\345\231\250/CalculatorFrame.java" index 0450c46..4b6749b 100644 --- "a/src/\350\256\241\347\256\227\345\231\250/CalculatorFrame.java" +++ "b/src/\350\256\241\347\256\227\345\231\250/CalculatorFrame.java" @@ -58,7 +58,7 @@ double n,m,r,flag=0;; btn.addActionListener(this); btn.setSize(1,1); btn.setBackground(new Color(250,255,240)); - btn.setFont(new Font("宋体",Font.BOLD,15)); + btn.setFont(new Font("宋体",Font.BOLD,20)); if(temp.equals("=")||temp.equals("C")||temp.equals("⇐")) btn.setFont(new Font("粗体",Font.BOLD,20)); } @@ -66,8 +66,8 @@ double n,m,r,flag=0;; JButton btn=new JButton(north[i]); p3.add(btn); btn.setSize(3,2); - btn.addActionListener(this);{ - } + btn.addActionListener(this); + btn.setFont(new Font("宋体",Font.BOLD,15)); btn.setBackground(new Color(250,255,240)); if(north[i]=="change") btn.addActionListener(new ActionListener() { @@ -94,8 +94,8 @@ double n,m,r,flag=0;; { num1=num1+e.getActionCommand(); text.setText(num1); - text.setFont(new Font("monospaced", Font.PLAIN, 20)); - text1.setFont(new Font("monospaced", Font.PLAIN, 15));} + text.setFont(new Font("黑体", Font.PLAIN, 20)); + text1.setFont(new Font("黑体", Font.PLAIN, 20));} else if(e.getActionCommand().matches("⇐")) { @@ -214,6 +214,8 @@ double n,m,r,flag=0;; n=-n; result=n+""; text.setText(result); + num2=result; + num1=""; result=""; } else if(e.getActionCommand().equals("=")) { @@ -221,6 +223,7 @@ double n,m,r,flag=0;; Scanner scanner=new Scanner(text1.getText()); num2=saveNumberAndCalculator(scanner.next()); text.setText(num2); + num1=""; } else if(e.getActionCommand().equals("%")) { m=Double.parseDouble(num1); diff --git "a/src/\350\256\241\347\256\227\345\231\250/Standard.java" "b/src/\350\256\241\347\256\227\345\231\250/Standard.java" index c94ae44..77c4d12 100644 --- "a/src/\350\256\241\347\256\227\345\231\250/Standard.java" +++ "b/src/\350\256\241\347\256\227\345\231\250/Standard.java" @@ -76,8 +76,8 @@ if(".0123456789".indexOf(e.getActionCommand())!=-1) { num1=num1+e.getActionCommand(); text.setText(num1); -text.setFont(new Font("monospaced", Font.PLAIN, 20)); -text1.setFont(new Font("monospaced", Font.PLAIN, 15));} +text.setFont(new Font("黑体", Font.PLAIN, 20)); +text1.setFont(new Font("黑体", Font.PLAIN, 15));} else if(e.getActionCommand().matches("⇐")) { @@ -98,6 +98,7 @@ text1.setText(text1.getText()+text.getText()); Scanner scanner=new Scanner(text1.getText()); num2=saveNumberAndCalculator(scanner.next()); text.setText(num2); +num1=""; } else if(e.getActionCommand().equals("%")) { m=Double.parseDouble(num1); @@ -111,7 +112,10 @@ num2=""; text.setText(num2); text1.setText(num1);} -} +else if(e.getActionCommand().equals("e")) { + num1="2.718281828"; + text.setText(num1); +}} private String saveNumberAndCalculator(String str) { if(str.startsWith("-")) { StringBuffer s1=new StringBuffer(str); -- Gitee