From 4c77d984be6cc538932492cf5fb32a3695dd4fb6 Mon Sep 17 00:00:00 2001 From: Your Name Date: Wed, 9 Jun 2021 20:43:07 +0800 Subject: [PATCH 1/8] my first commit --- src/java2020spring/ComputerFrame.java | 94 +++++++++++++ src/java2020spring/ComputerOperation.java | 162 ++++++++++++++++++++++ src/java2020spring/MainClass.java | 22 +++ src/java2020spring/MyMath.java | 51 +++++++ src/java2020spring/Test.java | 10 -- 5 files changed, 329 insertions(+), 10 deletions(-) create mode 100644 src/java2020spring/ComputerFrame.java create mode 100644 src/java2020spring/ComputerOperation.java create mode 100644 src/java2020spring/MainClass.java create mode 100644 src/java2020spring/MyMath.java delete mode 100644 src/java2020spring/Test.java diff --git a/src/java2020spring/ComputerFrame.java b/src/java2020spring/ComputerFrame.java new file mode 100644 index 0000000..3dff165 --- /dev/null +++ b/src/java2020spring/ComputerFrame.java @@ -0,0 +1,94 @@ +package java2020spring; + +import java.awt.BorderLayout; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; + +import java.awt.*; + +import javax.swing.*; + +public class ComputerFrame extends JFrame implements ActionListener{ + JTextField text=null; + JButton button=null; + Box Nbox; + + String nameComputer[]= {"%","√","x²","1/x","CE","C","back","/","7","8","9","*","4","5","6","-","1","2","3","+","+/-","0",".","="}; + String M[]= {"MC","MR","MS","M+","M-"}; + ComputerOperation operation=new ComputerOperation(); + + ComputerFrame(){ + //底层 + JPanel panel=new JPanel(); + panel.setLayout(new BorderLayout()); + + //NORTH + JPanel panel1=new JPanel(); + panel1.setLayout(new GridLayout(1,5,3,3)); + setMButton(panel1); + Nbox=Box.createVerticalBox(); + Nbox.add(getTextField()); + Nbox.add(panel1); + panel.add(Nbox,BorderLayout.NORTH); + + //CENTER + JPanel panel2=new JPanel(); + panel2.setLayout(new GridLayout(6,4)); + setAllButton(panel2); + panel.add(panel2,BorderLayout.CENTER); + + this.add(panel); + this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); + this.setVisible(true); + } + //剩余键 + private void setAllButton(JPanel panel2) { + JButton[] aButton=new JButton[nameComputer.length]; + + for(int i=0;i Date: Wed, 9 Jun 2021 22:32:04 +0800 Subject: [PATCH 2/8] my second commit --- src/java2020spring/ComputerOperation.java | 89 +++++++++++------------ src/java2020spring/MyMath.java | 40 +++++----- 2 files changed, 61 insertions(+), 68 deletions(-) diff --git a/src/java2020spring/ComputerOperation.java b/src/java2020spring/ComputerOperation.java index 4e7828f..f0108a6 100644 --- a/src/java2020spring/ComputerOperation.java +++ b/src/java2020spring/ComputerOperation.java @@ -2,14 +2,19 @@ package java2020spring; import java2020spring.MyMath; + + +import java.math.BigDecimal; + + public class ComputerOperation { static String num1="0"; - static String getnum="0"; + static String getnum=null; double store; String numString="0123456789."; - String calString="+-*/%"; - + String calString="+-*/"; + boolean isCal=false; boolean isSecondNum=false; static String operation=null; MyMath myMath=new MyMath(); @@ -35,7 +40,9 @@ public class ComputerOperation { }else if(calString.indexOf(cmd) != -1) { return calOperatoin(cmd,text); }else if(cmd.equals("=")) { - return myMath.getResult(operation, getnum, text); + return cal(text,true); + }else if(cmd.equals("%")) { + return persent(text,true); }else { return M(cmd,text); } @@ -43,62 +50,50 @@ public class ComputerOperation { + } + private String cal(String text, boolean b) { + isSecondNum=true; + + getnum=myMath.getResult(operation, getnum, text); + isSecondNum=false; + operation=null; + return getnum; } public String calOperatoin(String cmd, String text) { - operation=cmd;//下面要用,储存符号 - if(getnum!="0") { - if(isSecondNum) { + if(getnum==null||operation==null) { getnum=text; - System.out.println("fuhao "+getnum); - return null; - } - System.out.println(isSecondNum); - System.out.println("fuhao 算之前 "+getnum); + operation=cmd; + }else { getnum=myMath.getResult(operation, getnum, text); - System.out.println("fuhao 算完得到 "+getnum); - - return getnum; - - }//怎么存一下第一次的数字 + } + - isSecondNum=true; + isSecondNum=true; - return null; + return getnum; } //实现 //数字 public String getNumber(String cmd,String text) { - String result=cmd; - - if (!"0".equals(text)) {//不是零 123/null - - if (isSecondNum) {//text是第二个数字 - - getnum=text; - result=cmd; - isSecondNum=false;//如果是符号就存一下 - System.out.println("number里面的getnum "+getnum); - - - } //第一个数字 - else { result = text + result;//如果前面是数字就并上前 - } - if(result.indexOf(".") == 0) { - result = "0" + result; + String result = cmd; + // text不等于0 + if (!"0".equals(text)) { + if (isSecondNum) { + isSecondNum = false; + } else { + result = text + result; } - - - - }//是零 - - + } + if (result.indexOf(".") == 0) { + result = "0" + result; + } return result; } //C public String cleanAll() { operation=null; - getnum="0"; + getnum=null; return "0"; } @@ -133,6 +128,11 @@ public class ComputerOperation { return String.valueOf(Math.sqrt(Double.valueOf(text))); } + public String persent(String text, boolean b) { + + return String.valueOf(Double.valueOf(text)/100); + + } //倒数 public String bottom(String text) { if (text.equals("0")){ @@ -144,7 +144,7 @@ public class ComputerOperation { } //储存 public String M(String cmd,String text) { - if(cmd.equals("M+")) {//要改 + if(cmd.equals("M+")) { store =MyMath.add(store,Double.valueOf(text)); } else if(cmd.equals("M-")) { @@ -159,4 +159,3 @@ public class ComputerOperation { return null; } } - diff --git a/src/java2020spring/MyMath.java b/src/java2020spring/MyMath.java index 2d55a92..3837059 100644 --- a/src/java2020spring/MyMath.java +++ b/src/java2020spring/MyMath.java @@ -5,29 +5,23 @@ Double operation,firstNum,secondNum; Double result; public String getResult(String operation,String num1,String num2){ - firstNum=Double.valueOf(num1); - secondNum=Double.valueOf(num2); - if(operation.equals("*")) { - result=firstNum*secondNum; - }else if(operation.equals("-")) { - result=firstNum-secondNum; - }else if(operation.equals("+")) { - result=firstNum+secondNum; - }else if(operation.equals("%")) { - if(secondNum==0) { - result=firstNum; + if(operation.equals("*")) { + result=Double.valueOf(num1).doubleValue()*Double.valueOf(num2).doubleValue(); + }else if(operation.equals("-")) { + result=Double.valueOf(num1).doubleValue()-Double.valueOf(num2).doubleValue(); + }else if(operation.equals("+")) { + result=Double.valueOf(num1).doubleValue()+Double.valueOf(num2).doubleValue(); + }else if(operation.equals("/")) { + if(num1.equals("0")) { + + result=0.0; + } + result=Double.valueOf(num1).doubleValue()/Double.valueOf(num2).doubleValue(); + } - result=firstNum%secondNum; - }else if(operation.equals("/")) { - if(secondNum==0) { - return null;//不对劲 - } - result=firstNum%secondNum; + return String.valueOf(result); + } - return String.valueOf(result); - - } - public static double divide(int i, Double valueOf) { @@ -44,8 +38,8 @@ Double result; public static double subtract(double store, Double valueOf) { - // TODO 自动生成的方法存根 + return store-valueOf; } -} +} \ No newline at end of file -- Gitee From eb7033bce2ed1ba4997c891b9eb09923d1e935ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=8E=E9=9F=B5=E7=91=B6?= <1223685717@qq.com> Date: Thu, 10 Jun 2021 16:37:38 +0800 Subject: [PATCH 3/8] update src/java2020spring/ComputerFrame.java. third commit --- src/java2020spring/ComputerFrame.java | 162 ++++++++++++++++++++++++-- 1 file changed, 155 insertions(+), 7 deletions(-) diff --git a/src/java2020spring/ComputerFrame.java b/src/java2020spring/ComputerFrame.java index 3dff165..04639cd 100644 --- a/src/java2020spring/ComputerFrame.java +++ b/src/java2020spring/ComputerFrame.java @@ -1,14 +1,90 @@ package java2020spring; + + import java.awt.BorderLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; - +import javax.swing.*; import java.awt.*; import javax.swing.*; - +import java.util.ArrayList; +import java.util.List; public class ComputerFrame extends JFrame implements ActionListener{ + + //菜单 + JMenuBar menubar; + JMenu menu1,menu2; + JMenuItem menuItem; + //菜单中的单选框:标准型,科学型 + JRadioButton radioSt,radioSc; + //菜单中的单选框:度数 + JRadioButton 弧度转角度,角度转弧度; + //菜单中的单选框:多少进制 + JRadioButton R16,R10,R8,R2; + //分组 + ButtonGroup group1,group2,group3; + //菜单中的复选框:数字分组 + JCheckBox checkbox; + +void MenuBar() { + //只加了一行菜单 + menubar=new JMenuBar(); + menu1=new JMenu("编辑"); + menu2=new JMenu("查看"); + menuItem=new JMenuItem("帮助"); + menuItem.addActionListener(this); + menu1.add(menuItem); + + //菜单中的单选框:标准型,科学型 + group1=new ButtonGroup(); + radioSt=new JRadioButton("标准型"); + + + group1.add(radioSt); + + menu2.add(radioSt); + + //菜单中的单选框:多少进制 + group2=new ButtonGroup(); + R16=new JRadioButton("十进制转十六进制"); + R10=new JRadioButton("十进制转十进制"); + R8=new JRadioButton("十进制转八进制"); + R8.addActionListener(this); + R2=new JRadioButton("十进制转二进制"); + R2.addActionListener(this); + + group2.add(R16); + group2.add(R10); + group2.add(R8); + group2.add(R2); + menu2.add(R16); + menu2.add(R10); + menu2.add(R8); + menu2.add(R2); + //菜单中的单选框:度数 + group3=new ButtonGroup(); + 弧度转角度=new JRadioButton("弧度转角度"); + 角度转弧度=new JRadioButton("角度转弧度"); + + 弧度转角度.addActionListener(this); + 角度转弧度.addActionListener(this); + group3.add(弧度转角度); + group3.add(角度转弧度); + + menu2.add(弧度转角度); + menu2.add(角度转弧度); + + //菜单中的复选框:数字分组 + checkbox=new JCheckBox("数字分组"); + menu2.add(checkbox); + //只加了一行菜单 + menubar.add(menu1); + menubar.add(menu2); + + setJMenuBar(menubar); +} JTextField text=null; JButton button=null; Box Nbox; @@ -24,18 +100,23 @@ public class ComputerFrame extends JFrame implements ActionListener{ //NORTH JPanel panel1=new JPanel(); - panel1.setLayout(new GridLayout(1,5,3,3)); + panel1.setLayout(new GridLayout(1,5,2,10)); setMButton(panel1); Nbox=Box.createVerticalBox(); + Nbox.add(getTextField()); + + Box.createVerticalStrut(10); Nbox.add(panel1); panel.add(Nbox,BorderLayout.NORTH); //CENTER JPanel panel2=new JPanel(); - panel2.setLayout(new GridLayout(6,4)); + panel2.setLayout(new GridLayout(6,4,3,3)); setAllButton(panel2); panel.add(panel2,BorderLayout.CENTER); + panel1.setPreferredSize(new Dimension(400, 60)); + this.add(panel); this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); @@ -71,6 +152,7 @@ public class ComputerFrame extends JFrame implements ActionListener{ //文本框 JTextField getTextField() { text = new JTextField("0",1000); + text.setPreferredSize(new Dimension (50,50)); return text; } @@ -82,13 +164,79 @@ public class ComputerFrame extends JFrame implements ActionListener{ try { result=operation.calculate(cmd,text.getText());//传递按键名字和文本框中的显示,先解决数字显示问题,数字能变文本框,再得到文本计算,最后都能返回 } - catch(Exception e1) {//数字就返回数字+数字+...,cmd就分两类,一类只有前一个数,一类有前后两数。 + catch(Exception e1) { System.out.println(e1.getMessage()); } if(result != null){ text.setText(result);//返回显示在文本框上 } - + try { + if(e.getSource()==R2) {//只能将10进制转为二进制,以后再修改 + if(text.getText().indexOf(".")==-1) { + + int b2=Integer.parseInt(text.getText()); + int a2; + String sum="0"; + List list=new ArrayList();//集合用来存每次辗转相除的余数 + while(b2!=0){ + a2=b2%2; + list.add(a2); + b2=b2/2; + } + for(int j=list.size()-1;j>=0;j--){//最后余数是倒着写的,我们反向遍历集合就可以 + sum=sum+list.get(j)+""; + } + text.setText(sum); + } + } + if(e.getSource()==R8) { + if(text.getText().indexOf(".")==-1) {//只能将10进制转为八进制,以后再修改 + + int b2=Integer.parseInt(text.getText()); + int a2; + String sum="0"; + List list=new ArrayList(); + while(b2!=0){ + a2=b2%8; + list.add(a2); + b2=b2/8; + } + for(int j=list.size()-1;j>=0;j--){ + sum=sum+list.get(j)+""; + } + text.setText(sum); + } + } + if(e.getSource()==R16) {//只能将10进制转为十六进制,以后再修改 + if(text.getText().indexOf(".")==-1) { + int b2=Integer.parseInt(text.getText()); + int a2; + String sum="0"; + List list=new ArrayList(); + while(b2!=0){ + a2=b2%16; + list.add(a2); + b2=b2/16; + } + for(int j=list.size()-1;j>=0;j--){ + sum=sum+list.get(j)+""; + } + text.setText(sum); + } + } + if(e.getSource()==弧度转角度) {//只能将弧度转为角度 + text.setText(String.valueOf((Math.PI/180)*Double.valueOf(text.getText()))); + } + if(e.getSource()==角度转弧度) {//只能将角度转为弧度 + text.setText(String.valueOf((180/Math.PI)*Double.valueOf(text.getText()))); + } + if(e.getSource()==menuItem) { + JOptionPane.showMessageDialog(null, "简单计算器"); + + } + } + catch(Exception e2) { + System.out.println(e2.getMessage()); + } } } - -- Gitee From 8ccc16ff0a40fdbe399895c45047ea5d28ee6388 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=8E=E9=9F=B5=E7=91=B6?= <1223685717@qq.com> Date: Thu, 10 Jun 2021 16:39:24 +0800 Subject: [PATCH 4/8] update src/java2020spring/ComputerFrame.java. --- src/java2020spring/ComputerFrame.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/java2020spring/ComputerFrame.java b/src/java2020spring/ComputerFrame.java index 04639cd..50e609d 100644 --- a/src/java2020spring/ComputerFrame.java +++ b/src/java2020spring/ComputerFrame.java @@ -177,13 +177,13 @@ void MenuBar() { int b2=Integer.parseInt(text.getText()); int a2; String sum="0"; - List list=new ArrayList();//集合用来存每次辗转相除的余数 + List list=new ArrayList(); while(b2!=0){ a2=b2%2; list.add(a2); b2=b2/2; } - for(int j=list.size()-1;j>=0;j--){//最后余数是倒着写的,我们反向遍历集合就可以 + for(int j=list.size()-1;j>=0;j--){ sum=sum+list.get(j)+""; } text.setText(sum); -- Gitee From 5e7059cde03cae30fa009cc612c830d3ec3c0a5c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=8E=E9=9F=B5=E7=91=B6?= <1223685717@qq.com> Date: Thu, 10 Jun 2021 16:40:45 +0800 Subject: [PATCH 5/8] update src/java2020spring/ComputerOperation.java. third commit --- src/java2020spring/ComputerOperation.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/java2020spring/ComputerOperation.java b/src/java2020spring/ComputerOperation.java index f0108a6..52c9349 100644 --- a/src/java2020spring/ComputerOperation.java +++ b/src/java2020spring/ComputerOperation.java @@ -1,12 +1,12 @@ package java2020spring; - +import java.math.BigDecimal; import java2020spring.MyMath; import java.math.BigDecimal; - - +import java.math.BigDecimal; +import java.math.BigDecimal; public class ComputerOperation { static String num1="0"; -- Gitee From 4b710f59a646142af4bb77954349640876e14f8e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=8E=E9=9F=B5=E7=91=B6?= <1223685717@qq.com> Date: Thu, 10 Jun 2021 16:40:59 +0800 Subject: [PATCH 6/8] update src/java2020spring/MainClass.java. --- src/java2020spring/MainClass.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/java2020spring/MainClass.java b/src/java2020spring/MainClass.java index 851fc54..9443271 100644 --- a/src/java2020spring/MainClass.java +++ b/src/java2020spring/MainClass.java @@ -13,7 +13,7 @@ public class MainClass { frame=new ComputerFrame(); frame.setTitle("计算器"); frame.setBounds(10,10,450,600);//设置多高宽,还要改 - //frame.MenuBar(); + frame.MenuBar(); frame.setVisible(true); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } -- Gitee From 16b7408168308e7372b294362efe14275a9d64bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=8E=E9=9F=B5=E7=91=B6?= <1223685717@qq.com> Date: Thu, 10 Jun 2021 18:58:38 +0800 Subject: [PATCH 7/8] update src/java2020spring/ComputerOperation.java. --- src/java2020spring/ComputerOperation.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/java2020spring/ComputerOperation.java b/src/java2020spring/ComputerOperation.java index 52c9349..bb12ee8 100644 --- a/src/java2020spring/ComputerOperation.java +++ b/src/java2020spring/ComputerOperation.java @@ -65,6 +65,7 @@ public class ComputerOperation { operation=cmd; }else { getnum=myMath.getResult(operation, getnum, text); + operation=cmd; } -- Gitee From 5a4162bc13616bb4ea02910a486021cbba32f088 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=8E=E9=9F=B5=E7=91=B6?= <1223685717@qq.com> Date: Thu, 10 Jun 2021 19:07:17 +0800 Subject: [PATCH 8/8] update src/java2020spring/ComputerOperation.java. --- src/java2020spring/ComputerOperation.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/java2020spring/ComputerOperation.java b/src/java2020spring/ComputerOperation.java index bb12ee8..545f425 100644 --- a/src/java2020spring/ComputerOperation.java +++ b/src/java2020spring/ComputerOperation.java @@ -89,6 +89,9 @@ public class ComputerOperation { if (result.indexOf(".") == 0) { result = "0" + result; } + if(text.indexOf(".")!=-1 &&cmd==".") { + result=text; + } return result; } //C -- Gitee