From 293487e7101d1eae65ebe7d547914072e44f2ca0 Mon Sep 17 00:00:00 2001 From: teddywm <20565438@qq.com> Date: Sun, 5 Jun 2022 21:50:29 +0800 Subject: [PATCH 1/5] ndfl --- .../waking/call}/Test.java | 0 src/java2022spring/CalService.java | 10 ++ src/java2022spring/Calculator.java | 136 ++++++++++++++++++ src/java2022spring/help.java | 5 + src/java2022spring/lalaal.txt | 0 src/java2022spring/lsls.txt | 0 6 files changed, 151 insertions(+) rename src/{java2022spring => com/waking/call}/Test.java (100%) create mode 100644 src/java2022spring/CalService.java create mode 100644 src/java2022spring/Calculator.java create mode 100644 src/java2022spring/help.java create mode 100644 src/java2022spring/lalaal.txt create mode 100644 src/java2022spring/lsls.txt diff --git a/src/java2022spring/Test.java b/src/com/waking/call/Test.java similarity index 100% rename from src/java2022spring/Test.java rename to src/com/waking/call/Test.java diff --git a/src/java2022spring/CalService.java b/src/java2022spring/CalService.java new file mode 100644 index 0000000..8f2f66d --- /dev/null +++ b/src/java2022spring/CalService.java @@ -0,0 +1,10 @@ +package java2022spring; + +public class CalService { + + public String callMethod(String cmd, String text) { + + return null; + } + +} diff --git a/src/java2022spring/Calculator.java b/src/java2022spring/Calculator.java new file mode 100644 index 0000000..eb07c92 --- /dev/null +++ b/src/java2022spring/Calculator.java @@ -0,0 +1,136 @@ +package java2022spring; + +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Dimension; +import java.awt.GridLayout; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.util.Arrays; + +import javax.swing.JButton; +import javax.swing.JFrame; +import javax.swing.JPanel; +import javax.swing.JTextField; + + +public class Calculator extends JFrame { + +//计算机的外观设计 + private static final long serialVersionUID = 1L; + private final static int width = 500; + private final static int height = 400; + + private JTextField text = null; + private JButton button = null; //存储标记 + + //计算器上各按键的名字(从上到下,从左到右) + private String[] keys1 = {"MC","7","8","9","/","sqrt","MR","4","5","6","*","%", + "MS","1","2","3","-","1/x","M+","0","+/-",".","+","="}; + private String[] keys2 = {"Back","CE","C"}; + private CalService service = new CalService(); + + public Calculator(){ + this.setTitle("CALCULATOR"); + this.setSize(width, height); + this.setLocationRelativeTo(null); + this.setResizable(false); + + //底层 + JPanel panel1 = new JPanel(); + panel1.setLayout(new BorderLayout(10,1)); + panel1.add(getTextField(), BorderLayout.NORTH); + panel1.setPreferredSize(new Dimension(width, height)); + + // + JButton[] Button2 = getRButton2(); + JPanel panel2 = new JPanel(); + panel2.setLayout(new BorderLayout(1,5)); + JPanel panel3 = new JPanel(); + panel3.setLayout(new GridLayout(1,3,3,3)); + for(JButton b : Button2){ + panel3.add(b); + } + panel2.add(panel3,BorderLayout.NORTH); + + JButton[] Button1 = getButton1(); + JPanel panel4 = new JPanel(); + panel4.setLayout(new GridLayout(4,5,3,5)); + for(JButton b : Button1){ + panel4.add(b); + } + panel2.add(panel4,BorderLayout.CENTER); + panel1.add(panel2,BorderLayout.CENTER); + + this.add(panel1); + this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); + this.setVisible(true); + + + } + + private JTextField getTextField(){ + text = new JTextField("0",10); + //text.setSize(480, 50); + return text; + } + + private JButton[] getButton1(){ + String[] redButton = {"/","*","-","+","=","MC","MR","MS","M+"}; + JButton[] button = new JButton[keys1.length]; + for(int i = 0; i < this.keys1.length; i++){ + JButton b = new JButton(this.keys1[i]); + b.addActionListener(getActionListener()); + + Arrays.sort(redButton); + if(Arrays.binarySearch(redButton, keys1[i]) >= 0){ + b.setForeground(Color.red); + }else{ + b.setForeground(Color.blue); + } + button[i] = b; + } + return button; + } + + private JButton[] getRButton2(){ + JButton[] rbutton = new JButton[keys2.length]; + for(int i = 0; i < this.keys2.length; i++){ + JButton b = new JButton(this.keys2[i]); + b.addActionListener(getActionListener()); + b.setForeground(Color.red); + rbutton[i] = b; + } + return rbutton; + } + + private ActionListener getActionListener(){ + ActionListener actionListener = new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + String cmd = e.getActionCommand(); + String result = null; + try { + result = service.callMethod(cmd, text.getText()); + } catch (Exception e2) { + System.out.println(e2.getMessage()); + } + if(cmd.indexOf("MC") == 0){ + button.setText(""); + }else if(cmd.indexOf("M") == 0){ + button.setText("M"); + } + //显示计算结果 + if(result != null){ + text.setText(result); + } + + } + }; + return actionListener; + } + public static void main(String[] args) { + new Calculator(); + } + } diff --git a/src/java2022spring/help.java b/src/java2022spring/help.java new file mode 100644 index 0000000..524fafe --- /dev/null +++ b/src/java2022spring/help.java @@ -0,0 +1,5 @@ +package java2022spring; + +public class help { + +} diff --git a/src/java2022spring/lalaal.txt b/src/java2022spring/lalaal.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/java2022spring/lsls.txt b/src/java2022spring/lsls.txt new file mode 100644 index 0000000..e69de29 -- Gitee From 72bc92402447b0c1c550300afeb5ebdb1d703aec Mon Sep 17 00:00:00 2001 From: teddywm <20565438@qq.com> Date: Mon, 6 Jun 2022 20:25:44 +0800 Subject: [PATCH 2/5] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E4=BA=86=E5=8A=A0?= =?UTF-8?q?=E6=B8=9B=E4=B9=98=E9=99=A4=E9=81=8B=E7=AE=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/java2022spring/1.txt | 0 src/java2022spring/Calculator.java | 293 ++++++++++++++++------ src/java2022spring/MyMath.java | 32 +++ src/java2022spring/OperationListener.java | 14 ++ 4 files changed, 258 insertions(+), 81 deletions(-) create mode 100644 src/java2022spring/1.txt create mode 100644 src/java2022spring/MyMath.java create mode 100644 src/java2022spring/OperationListener.java diff --git a/src/java2022spring/1.txt b/src/java2022spring/1.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/java2022spring/Calculator.java b/src/java2022spring/Calculator.java index eb07c92..be1a4de 100644 --- a/src/java2022spring/Calculator.java +++ b/src/java2022spring/Calculator.java @@ -6,131 +6,262 @@ import java.awt.Dimension; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; +import java.text.NumberFormat; import java.util.Arrays; - + import javax.swing.JButton; import javax.swing.JFrame; +import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JTextField; - public class Calculator extends JFrame { - + //计算机的外观设计 private static final long serialVersionUID = 1L; private final static int width = 500; private final static int height = 400; - + private JTextField text = null; - private JButton button = null; //存储标记 - - //计算器上各按键的名字(从上到下,从左到右) - private String[] keys1 = {"MC","7","8","9","/","sqrt","MR","4","5","6","*","%", - "MS","1","2","3","-","1/x","M+","0","+/-",".","+","="}; - private String[] keys2 = {"Back","CE","C"}; - private CalService service = new CalService(); - - public Calculator(){ + private JButton button = null; // 存储标记 + + // 计算器上各按键的名字(从上到下,从左到右) + private String[] keys1 = { "MC", "7", "8", "9", "/", "sqrt", "MR", "4", "5", "6", "*", "%", "MS", "1", "2", "3", + "-", "1/x", "M+", "0", "+/-", ".", "+", "=" }; + private String[] keys2 = { "Back", "CE", "C" }; + private JButton[] button1 = new JButton[keys1.length]; // 创建计算器的按键对象 + private double result = 0; // 存储计算结果 + private boolean flag = true; + private String command = "="; + private JLabel label_hint = new JLabel(); // 创建提示信息标签1 + private JLabel label_input = new JLabel(); // 创建输入信息标签2 + private JLabel label_result = new JLabel(); // 创建输出结果标签3 + public Calculator() { this.setTitle("CALCULATOR"); this.setSize(width, height); this.setLocationRelativeTo(null); this.setResizable(false); - - //底层 + + // 底层 JPanel panel1 = new JPanel(); - panel1.setLayout(new BorderLayout(10,1)); + panel1.setLayout(new BorderLayout(10, 1)); panel1.add(getTextField(), BorderLayout.NORTH); panel1.setPreferredSize(new Dimension(width, height)); // JButton[] Button2 = getRButton2(); JPanel panel2 = new JPanel(); - panel2.setLayout(new BorderLayout(1,5)); + panel2.setLayout(new BorderLayout(1, 5)); JPanel panel3 = new JPanel(); - panel3.setLayout(new GridLayout(1,3,3,3)); - for(JButton b : Button2){ + panel3.setLayout(new GridLayout(1, 3, 3, 3)); + for (JButton b : Button2) { panel3.add(b); } - panel2.add(panel3,BorderLayout.NORTH); - + panel2.add(panel3, BorderLayout.NORTH); + JButton[] Button1 = getButton1(); JPanel panel4 = new JPanel(); - panel4.setLayout(new GridLayout(4,5,3,5)); - for(JButton b : Button1){ + panel4.setLayout(new GridLayout(4, 5, 3, 5)); + for (JButton b : Button1) { panel4.add(b); } - panel2.add(panel4,BorderLayout.CENTER); - panel1.add(panel2,BorderLayout.CENTER); - + panel2.add(panel4, BorderLayout.CENTER); + panel1.add(panel2, BorderLayout.CENTER); + this.add(panel1); this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); this.setVisible(true); - - } - - private JTextField getTextField(){ - text = new JTextField("0",10); - //text.setSize(480, 50); - return text; - } - private JButton[] getButton1(){ - String[] redButton = {"/","*","-","+","=","MC","MR","MS","M+"}; - JButton[] button = new JButton[keys1.length]; - for(int i = 0; i < this.keys1.length; i++){ - JButton b = new JButton(this.keys1[i]); - b.addActionListener(getActionListener()); - - Arrays.sort(redButton); - if(Arrays.binarySearch(redButton, keys1[i]) >= 0){ - b.setForeground(Color.red); - }else{ - b.setForeground(Color.blue); - } - button[i] = b; + for (int i = 0; i < keys1.length; i++) { + button1[i] = new JButton(keys1[i]); + if (keys1[i].equals("+") || keys1[i].equals("-") || keys1[i].equals("*") || keys1[i].equals("÷") + || keys1[i].equals("%") || keys1[i].equals("=")) { + button1[i].addActionListener(new OperationListener());// 给按钮+,-,*,/,%,=注册监听器 + } else { + button1[i].addActionListener(new DataListener());//给按钮AC,←,(-),.,0,1,2,3,4,5,6,7,8,9注册监听器 } - return button; } - private JButton[] getRButton2(){ - JButton[] rbutton = new JButton[keys2.length]; - for(int i = 0; i < this.keys2.length; i++){ - JButton b = new JButton(this.keys2[i]); - b.addActionListener(getActionListener()); + + } + + private JTextField getTextField() { + text = new JTextField("0", 10); + // text.setSize(480, 50); + return text; + } + + private JButton[] getButton1() { + String[] redButton = { "/", "*", "-", "+", "=", "MC", "MR", "MS", "M+" }; + JButton[] button = new JButton[keys1.length]; + for (int i = 0; i < this.keys1.length; i++) { + JButton b = new JButton(this.keys1[i]); + b.addActionListener(getActionListener()); + + Arrays.sort(redButton); + if (Arrays.binarySearch(redButton, keys1[i]) >= 0) { b.setForeground(Color.red); - rbutton[i] = b; + } else { + b.setForeground(Color.blue); } - return rbutton; + button[i] = b; } + return button; + } - private ActionListener getActionListener(){ - ActionListener actionListener = new ActionListener() { - - @Override - public void actionPerformed(ActionEvent e) { - String cmd = e.getActionCommand(); - String result = null; - try { - result = service.callMethod(cmd, text.getText()); - } catch (Exception e2) { - System.out.println(e2.getMessage()); - } - if(cmd.indexOf("MC") == 0){ - button.setText(""); - }else if(cmd.indexOf("M") == 0){ - button.setText("M"); - } - //显示计算结果 - if(result != null){ - text.setText(result); + private JButton[] getRButton2() { + JButton[] rbutton = new JButton[keys2.length]; + for (int i = 0; i < this.keys2.length; i++) { + JButton b = new JButton(this.keys2[i]); + b.addActionListener(getActionListener()); + b.setForeground(Color.red); + rbutton[i] = b; + } + return rbutton; + } + private ActionListener getActionListener() { + ActionListener actionListener = new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + String cmd = e.getActionCommand(); + String result = null; + try { + result = service.callMethod(cmd, text.getText()); + } catch (Exception e2) { + System.out.println(e2.getMessage()); + } + if (cmd.indexOf("MC") == 0) { + button.setText(""); + } else if (cmd.indexOf("M") == 0) { + button.setText("M"); + } + // 显示计算结果 + if (result != null) { + text.setText(result); + } + + } + }; + return actionListener; + } + + public class DataListener implements ActionListener { + @Override + public void actionPerformed(ActionEvent e) { + String str = e.getActionCommand();// 返回与此动作相关的命令字符串。 + if (Calculator.this.flag == true) {// 当想输入新的数字时,清空输入显示标签 + label_input.setText(" "); + Calculator.this.flag = false; + + } + if (str.equals("(-)")) {// 当点击(-)时 + if (label_input.getText().indexOf("(-)") == -1) {// 如果此时显示框里还没出现(-)时 + label_input.setText(str); + } + } + if (!str.equals("(-)")) {// 当命令不是(-)时 + if (str.equals("AC")) { // 点击清零键时 + clear(); + } else if (str.equals("←")) { // 点击返回键时 + getBack(); + } else if (str.equals(".")) { // 点击小数点时,小数点只能出现一次,不能在首位 + if (label_input.getText().indexOf(".") == -1 && !label_input.getText().equals(" ")) { + label_input.setText(label_input.getText() + str); + } else { + // clear(); + label_input.setText(label_input.getText() + str); + label_hint.setText("小数点不合法,请重新输入"); } - + } else { // 点击0,1,2,3,4,5,6,7,8,9时显示原数 + label_input.setText(label_input.getText() + str); + } + } + } + } + + // 返回上一级 + public void getBack() { + if (label_input.getText().length() <= 1) { // 长度小于等于1时清空显示框 + clear(); + } else { + String str = ""; + if (label_input.getText().length() == 3) { // 处理(-)问题,我把(-)看成算一个字符,要返回就整体返回 + String str1 = label_input.getText().substring(label_input.getText().length() - 3); + if (str1.equals("(-)")) { + str = " "; + } else { + str = label_input.getText().substring(0, label_input.getText().length() - 1); } - }; - return actionListener; + } else { // 长度大于3时正常返回上一级 + str = label_input.getText().substring(0, label_input.getText().length() - 1); + } + label_input.setText(str); } - public static void main(String[] args) { - new Calculator(); + label_hint.setText(" "); // 清空提示显示框 + } + + // 清屏 + public void clear() { + label_hint.setText(" "); + label_input.setText(" "); + label_result.setText("0"); + this.result = 0; + Calculator.this.flag = true; // 恢复初始化标记 + } + + public static void main(String[] args) { + new Calculator(); + } +//數據計算 + public void caculate(double ans) { + switch (this.command) { + case "+": // 计算数据的和 + this.result += ans; + break; + case "-": // 计算数据的差 + this.result -= ans; + break; + case "*": // 计算数据的乘积 + this.result *= ans; + break; + case "÷": // 计算数据的商 + if (ans == 0) { + label_hint.setText("提示:除数不能为0"); + return; + } + this.result /= ans; + break; + case "%": // 计算数据的余 + double s1 = this.result; + int d1 = (int) s1; + double s2 = ans; + int d2 = (int) s2; + if (d1 == this.result && d2 == ans && d2 != 0) { + this.result %= ans; + } else { + if (d1 != s1) { + label_hint.setText("提示:余数的分子必须为整数"); + } else if (d2 != s2) { + label_hint.setText("提示:余数的分母必须为整数"); + } else if (s2 == 0) { + label_hint.setText("提示:余数的分母不能为0"); + } + } + break; + case "=": // 计算结果 + this.result = ans; + break; } + label_result.setText(" " + format(this.result)); // 显示计算结果 + } + + // 计算结果格式处理 + public String format(double d) { + String formatString = ""; + NumberFormat nf = NumberFormat.getInstance(); // 放回当前默认语言环境的通用数字格式 + formatString = nf.format(d); // 格式规范化 + return formatString; // 返回格式化后的数据 } +} diff --git a/src/java2022spring/MyMath.java b/src/java2022spring/MyMath.java new file mode 100644 index 0000000..b813bbc --- /dev/null +++ b/src/java2022spring/MyMath.java @@ -0,0 +1,32 @@ +package java2022spring; + +import java.math.BigDecimal; + +public class MyMath { + /** + * 为一个double类型创建BigDecimal对象 + */ + private static BigDecimal getBigDecimal(double number){ + return new BigDecimal(number); + } + public static double add(double num1, double num2) { + BigDecimal first = getBigDecimal(num1); + BigDecimal second = getBigDecimal(num2); + return first.add(second).doubleValue(); + } + public static double subtract(double num1, double num2) { + BigDecimal first = getBigDecimal(num1); + BigDecimal second = getBigDecimal(num2); + return first.subtract(second).doubleValue(); + } + public static double multiply(double num1, double num2) { + BigDecimal first = getBigDecimal(num1); + BigDecimal second = getBigDecimal(num2); + return first.multiply(second).doubleValue(); + } + public static double divide(double num1, double num2) { + BigDecimal first = getBigDecimal(num1); + BigDecimal second = getBigDecimal(num2); + return first.divide(second,3,BigDecimal.ROUND_HALF_UP).doubleValue(); + } +} diff --git a/src/java2022spring/OperationListener.java b/src/java2022spring/OperationListener.java new file mode 100644 index 0000000..393f137 --- /dev/null +++ b/src/java2022spring/OperationListener.java @@ -0,0 +1,14 @@ +package java2022spring; + +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; + +public class OperationListener implements ActionListener { + + @Override + public void actionPerformed(ActionEvent e) { + // TODO Auto-generated method stub + + } + +} -- Gitee From faaa4879be512fbc7bb6566ccccfbba2bb7d76d8 Mon Sep 17 00:00:00 2001 From: teddywm <20565438@qq.com> Date: Wed, 8 Jun 2022 19:18:22 +0800 Subject: [PATCH 3/5] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BA=86math=E6=96=B9?= =?UTF-8?q?=E6=B3=95=E4=B8=AD=E7=9A=84=E9=81=8B=E7=AE=97=E5=87=BD=E6=95=B8?= =?UTF-8?q?=EF=BC=8C=E4=BD=BF=E5=B0=8F=E6=95=B8=E9=BB=9E=E5=BE=8C=E6=9B=B4?= =?UTF-8?q?=E7=B2=BE=E7=A2=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/java2022spring/{1.txt => 1 (2).txt} | 0 src/java2022spring/{lalaal.txt => 2.txt} | 0 src/java2022spring/CalService.java | 10 -- src/java2022spring/Calculator.java | 115 ++++----------- src/java2022spring/{MyMath.java => Math.java} | 7 +- src/java2022spring/OperationListener.java | 14 -- src/java2022spring/Run.java | 138 ++++++++++++++++++ src/java2022spring/help.java | 5 - src/java2022spring/lsls.txt | 0 9 files changed, 170 insertions(+), 119 deletions(-) rename src/java2022spring/{1.txt => 1 (2).txt} (100%) rename src/java2022spring/{lalaal.txt => 2.txt} (100%) delete mode 100644 src/java2022spring/CalService.java rename src/java2022spring/{MyMath.java => Math.java} (86%) delete mode 100644 src/java2022spring/OperationListener.java create mode 100644 src/java2022spring/Run.java delete mode 100644 src/java2022spring/help.java delete mode 100644 src/java2022spring/lsls.txt diff --git a/src/java2022spring/1.txt b/src/java2022spring/1 (2).txt similarity index 100% rename from src/java2022spring/1.txt rename to src/java2022spring/1 (2).txt diff --git a/src/java2022spring/lalaal.txt b/src/java2022spring/2.txt similarity index 100% rename from src/java2022spring/lalaal.txt rename to src/java2022spring/2.txt diff --git a/src/java2022spring/CalService.java b/src/java2022spring/CalService.java deleted file mode 100644 index 8f2f66d..0000000 --- a/src/java2022spring/CalService.java +++ /dev/null @@ -1,10 +0,0 @@ -package java2022spring; - -public class CalService { - - public String callMethod(String cmd, String text) { - - return null; - } - -} diff --git a/src/java2022spring/Calculator.java b/src/java2022spring/Calculator.java index be1a4de..f5e32d4 100644 --- a/src/java2022spring/Calculator.java +++ b/src/java2022spring/Calculator.java @@ -29,10 +29,8 @@ public class Calculator extends JFrame { private String[] keys1 = { "MC", "7", "8", "9", "/", "sqrt", "MR", "4", "5", "6", "*", "%", "MS", "1", "2", "3", "-", "1/x", "M+", "0", "+/-", ".", "+", "=" }; private String[] keys2 = { "Back", "CE", "C" }; - private JButton[] button1 = new JButton[keys1.length]; // 创建计算器的按键对象 - private double result = 0; // 存储计算结果 + private Run running = new Run(); private boolean flag = true; - private String command = "="; private JLabel label_hint = new JLabel(); // 创建提示信息标签1 private JLabel label_input = new JLabel(); // 创建输入信息标签2 private JLabel label_result = new JLabel(); // 创建输出结果标签3 @@ -41,14 +39,11 @@ public class Calculator extends JFrame { this.setSize(width, height); this.setLocationRelativeTo(null); this.setResizable(false); - - // 底层 JPanel panel1 = new JPanel(); panel1.setLayout(new BorderLayout(10, 1)); panel1.add(getTextField(), BorderLayout.NORTH); panel1.setPreferredSize(new Dimension(width, height)); - // JButton[] Button2 = getRButton2(); JPanel panel2 = new JPanel(); panel2.setLayout(new BorderLayout(1, 5)); @@ -71,19 +66,6 @@ public class Calculator extends JFrame { this.add(panel1); this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); this.setVisible(true); - - - for (int i = 0; i < keys1.length; i++) { - button1[i] = new JButton(keys1[i]); - if (keys1[i].equals("+") || keys1[i].equals("-") || keys1[i].equals("*") || keys1[i].equals("÷") - || keys1[i].equals("%") || keys1[i].equals("=")) { - button1[i].addActionListener(new OperationListener());// 给按钮+,-,*,/,%,=注册监听器 - } else { - button1[i].addActionListener(new DataListener());//给按钮AC,←,(-),.,0,1,2,3,4,5,6,7,8,9注册监听器 - } - } - - } private JTextField getTextField() { @@ -94,7 +76,7 @@ public class Calculator extends JFrame { private JButton[] getButton1() { String[] redButton = { "/", "*", "-", "+", "=", "MC", "MR", "MS", "M+" }; - JButton[] button = new JButton[keys1.length]; + JButton[] Button = new JButton[keys1.length]; for (int i = 0; i < this.keys1.length; i++) { JButton b = new JButton(this.keys1[i]); b.addActionListener(getActionListener()); @@ -105,20 +87,20 @@ public class Calculator extends JFrame { } else { b.setForeground(Color.blue); } - button[i] = b; + Button[i] = b; } - return button; + return Button; } private JButton[] getRButton2() { - JButton[] rbutton = new JButton[keys2.length]; + JButton[] rButton = new JButton[keys2.length]; for (int i = 0; i < this.keys2.length; i++) { JButton b = new JButton(this.keys2[i]); b.addActionListener(getActionListener()); b.setForeground(Color.red); - rbutton[i] = b; + rButton[i] = b; } - return rbutton; + return rButton; } private ActionListener getActionListener() { ActionListener actionListener = new ActionListener() { @@ -128,7 +110,7 @@ public class Calculator extends JFrame { String cmd = e.getActionCommand(); String result = null; try { - result = service.callMethod(cmd, text.getText()); + result = running.callMethod(cmd, text.getText()); } catch (Exception e2) { System.out.println(e2.getMessage()); } @@ -164,8 +146,6 @@ public class Calculator extends JFrame { if (!str.equals("(-)")) {// 当命令不是(-)时 if (str.equals("AC")) { // 点击清零键时 clear(); - } else if (str.equals("←")) { // 点击返回键时 - getBack(); } else if (str.equals(".")) { // 点击小数点时,小数点只能出现一次,不能在首位 if (label_input.getText().indexOf(".") == -1 && !label_input.getText().equals(" ")) { label_input.setText(label_input.getText() + str); @@ -180,7 +160,24 @@ public class Calculator extends JFrame { } } } + // 清屏 + public void clear() { + label_hint.setText(" "); + label_input.setText(" "); + label_result.setText("0"); + Calculator.this.flag = true; // 恢复初始化标记 + } + public static void main(String[] args) { + new Calculator(); + } + // 计算结果格式处理 + public String format(double d) { + String formatString = ""; + NumberFormat nf = NumberFormat.getInstance(); // 放回当前默认语言环境的通用数字格式 + formatString = nf.format(d); // 格式规范化 + return formatString; // 返回格式化后的数据 + } // 返回上一级 public void getBack() { if (label_input.getText().length() <= 1) { // 长度小于等于1时清空显示框 @@ -202,66 +199,6 @@ public class Calculator extends JFrame { label_hint.setText(" "); // 清空提示显示框 } - // 清屏 - public void clear() { - label_hint.setText(" "); - label_input.setText(" "); - label_result.setText("0"); - this.result = 0; - Calculator.this.flag = true; // 恢复初始化标记 - } - - public static void main(String[] args) { - new Calculator(); - } -//數據計算 - public void caculate(double ans) { - switch (this.command) { - case "+": // 计算数据的和 - this.result += ans; - break; - case "-": // 计算数据的差 - this.result -= ans; - break; - case "*": // 计算数据的乘积 - this.result *= ans; - break; - case "÷": // 计算数据的商 - if (ans == 0) { - label_hint.setText("提示:除数不能为0"); - return; - } - this.result /= ans; - break; - case "%": // 计算数据的余 - double s1 = this.result; - int d1 = (int) s1; - double s2 = ans; - int d2 = (int) s2; - if (d1 == this.result && d2 == ans && d2 != 0) { - this.result %= ans; - } else { - if (d1 != s1) { - label_hint.setText("提示:余数的分子必须为整数"); - } else if (d2 != s2) { - label_hint.setText("提示:余数的分母必须为整数"); - } else if (s2 == 0) { - label_hint.setText("提示:余数的分母不能为0"); - } - } - break; - case "=": // 计算结果 - this.result = ans; - break; - } - label_result.setText(" " + format(this.result)); // 显示计算结果 - } - - // 计算结果格式处理 - public String format(double d) { - String formatString = ""; - NumberFormat nf = NumberFormat.getInstance(); // 放回当前默认语言环境的通用数字格式 - formatString = nf.format(d); // 格式规范化 - return formatString; // 返回格式化后的数据 + public void setButton1(JButton[] button1) { } } diff --git a/src/java2022spring/MyMath.java b/src/java2022spring/Math.java similarity index 86% rename from src/java2022spring/MyMath.java rename to src/java2022spring/Math.java index b813bbc..3102770 100644 --- a/src/java2022spring/MyMath.java +++ b/src/java2022spring/Math.java @@ -2,7 +2,7 @@ package java2022spring; import java.math.BigDecimal; -public class MyMath { +public class Math { /** * 为一个double类型创建BigDecimal对象 */ @@ -24,9 +24,14 @@ public class MyMath { BigDecimal second = getBigDecimal(num2); return first.multiply(second).doubleValue(); } + @SuppressWarnings("deprecation") public static double divide(double num1, double num2) { BigDecimal first = getBigDecimal(num1); BigDecimal second = getBigDecimal(num2); return first.divide(second,3,BigDecimal.ROUND_HALF_UP).doubleValue(); } + public static char[] sqrt(Double valueOf) { + // TODO Auto-generated method stub + return null; + } } diff --git a/src/java2022spring/OperationListener.java b/src/java2022spring/OperationListener.java deleted file mode 100644 index 393f137..0000000 --- a/src/java2022spring/OperationListener.java +++ /dev/null @@ -1,14 +0,0 @@ -package java2022spring; - -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; - -public class OperationListener implements ActionListener { - - @Override - public void actionPerformed(ActionEvent e) { - // TODO Auto-generated method stub - - } - -} diff --git a/src/java2022spring/Run.java b/src/java2022spring/Run.java new file mode 100644 index 0000000..76d7a68 --- /dev/null +++ b/src/java2022spring/Run.java @@ -0,0 +1,138 @@ +package java2022spring; + +public class Run { + private boolean isSecondNum = false; + private String lastOp; + private String firstNum = "0"; + private String secondNum = "null"; + private double store; + private String numString = "0123456789."; + private String opString = "+-*/"; + + public String catNum(String cmd, String text) { + String result = cmd; + // 如果text不等于0 + if (!"0".equals(text)) { + if (isSecondNum) { + isSecondNum = false; + } else { + result = text + cmd; + } + } + if (result.indexOf(".") == 0) { + result = "0" + result; + } + return result; + } + + public String setOp(String cmd, String text) { + this.lastOp = cmd; + this.firstNum = text; + this.secondNum = null; + + this.isSecondNum = true; + return null; + } + + public String cal(String text, boolean isPercent) { + double secondResult = secondNum == null ? Double.valueOf(text) + .doubleValue() : Double.valueOf(secondNum).doubleValue(); + + //除数为0 + if(secondResult == 0 && this.lastOp.equals("/")){ + return "0"; + } + + //有% + if(isPercent){ + secondResult = Math.multiply(Double.valueOf(firstNum), Math.divide(secondResult, 100)); + } + if(this.lastOp.equals("+")){ + firstNum = String.valueOf(Math.add(Double.valueOf(firstNum),secondResult)); + }else if (this.lastOp.equals("-")) { + firstNum = String.valueOf(Math.subtract(Double.valueOf(firstNum),secondResult)); + }else if (this.lastOp.equals("*")) { + firstNum = String.valueOf(Math.multiply(Double.valueOf(firstNum),secondResult)); + }else if (this.lastOp.equals("/")) { + firstNum = String.valueOf(Math.divide(Double.valueOf(firstNum),secondResult)); + } + + secondNum = secondNum == null ? text :secondNum; + this.isSecondNum = true; + return firstNum; + } + //求开方 + public String sqrt(String text){ + this.isSecondNum = true; + return String.valueOf(Math.sqrt(Double.valueOf(text))); + } + //求倒数 + public String setReciprocal(String text){ + if (text.equals("0")){ + return text; + }else{ + this.isSecondNum = true; + return String.valueOf(Math.divide(1, Double.valueOf(text))); + } + } + //存储 + public String mCmd(String cmd,String text){ + if(cmd.equals("M+")){ + store = Math.add(store, Double.valueOf(text)); + }else if (cmd.equals("MC")) { + store = 0; + }else if (cmd.equals("MR")) { + isSecondNum = true; + return String.valueOf(store); + }else if (cmd.equals("MS")) { + store = Double.valueOf(text).doubleValue(); + } + return null; + } + + public String backSpace(String text){ + return text.equals("0") || text.equals("") ? "0" :text.substring(0,text.length()-1); + } + + public String setNegative(String text){ + if(text.indexOf("-") == 0){ + return text.substring(1,text.length()); + }else{ + return "-" + text; + } + } + public String clearAll(){ + this.firstNum = "0"; + this.secondNum = null; + return this.firstNum; + } + public String clear(String text){ + return "0"; + } + + public String callMethod(String cmd, String text){ + if(cmd.equals("C")){ + return clearAll(); + }else if(cmd.equals("CE")){ + return clear(text); + }else if (cmd.equals("Back")) { + return backSpace(text); + }else if (numString.indexOf(cmd) != -1) { + return catNum(cmd, text); + }else if (opString.indexOf(cmd) != -1) { + return setOp(cmd, text); + }else if (cmd.equals("+/-")) { + return setNegative(text); //设置正负号 + }else if(cmd.equals("1/x")){ + return setReciprocal(text); + }else if (cmd.equals("sqrt")) { + return sqrt(text); + }else if(cmd.equals("%")){ + return cal(text, true); + }else if(cmd.equals("=")){ + return cal(text, false); + }else { + return mCmd(cmd, text); + } + } +} diff --git a/src/java2022spring/help.java b/src/java2022spring/help.java deleted file mode 100644 index 524fafe..0000000 --- a/src/java2022spring/help.java +++ /dev/null @@ -1,5 +0,0 @@ -package java2022spring; - -public class help { - -} diff --git a/src/java2022spring/lsls.txt b/src/java2022spring/lsls.txt deleted file mode 100644 index e69de29..0000000 -- Gitee From 8a7fb8ddd939c0471bc73076fa668851d443f6ca Mon Sep 17 00:00:00 2001 From: teddywm <20565438@qq.com> Date: Fri, 10 Jun 2022 01:54:22 +0800 Subject: [PATCH 4/5] =?UTF-8?q?=E6=9C=80=E5=BE=8C=E5=B0=8D=E7=A8=8B?= =?UTF-8?q?=E5=BA=8F=E5=81=9A=E4=BA=86=E8=AA=BF=E6=95=B4=EF=BC=8C=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=E4=BA=86=E4=B8=80=E4=BA=9B=E5=B0=8F=E9=8C=AF=E8=AA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/java2022spring/Calculator.java | 87 +++++++++++++++++++----------- 1 file changed, 56 insertions(+), 31 deletions(-) diff --git a/src/java2022spring/Calculator.java b/src/java2022spring/Calculator.java index f5e32d4..ccf624f 100644 --- a/src/java2022spring/Calculator.java +++ b/src/java2022spring/Calculator.java @@ -26,38 +26,50 @@ public class Calculator extends JFrame { private JButton button = null; // 存储标记 // 计算器上各按键的名字(从上到下,从左到右) - private String[] keys1 = { "MC", "7", "8", "9", "/", "sqrt", "MR", "4", "5", "6", "*", "%", "MS", "1", "2", "3", - "-", "1/x", "M+", "0", "+/-", ".", "+", "=" }; - private String[] keys2 = { "Back", "CE", "C" }; + private String[] keys1 = { "7", "8", "9", "/", "sqrt", "4", "5", "6", "*", "%", "1", "2", "3", "-", "1/x", "0", + "+/-", ".", "+", "=" }; + private String[] keys2 = { "MC", "MR", "MS", "M+" }; + private String[] keys3 = { "Back", "CE", "C" }; private Run running = new Run(); private boolean flag = true; private JLabel label_hint = new JLabel(); // 创建提示信息标签1 private JLabel label_input = new JLabel(); // 创建输入信息标签2 private JLabel label_result = new JLabel(); // 创建输出结果标签3 + public Calculator() { this.setTitle("CALCULATOR"); this.setSize(width, height); this.setLocationRelativeTo(null); this.setResizable(false); + // JPanel panel1 = new JPanel(); panel1.setLayout(new BorderLayout(10, 1)); panel1.add(getTextField(), BorderLayout.NORTH); panel1.setPreferredSize(new Dimension(width, height)); + + JButton[] mButton = getMButton(); + JPanel panel11 = new JPanel(); + panel11.setLayout(new GridLayout(5,1,0,5)); + for(JButton b : mButton ){ + panel11.add(b); + } + panel1.add(panel11,BorderLayout.WEST); - JButton[] Button2 = getRButton2(); + JButton[] rButton = getRButton(); JPanel panel2 = new JPanel(); panel2.setLayout(new BorderLayout(1, 5)); JPanel panel3 = new JPanel(); panel3.setLayout(new GridLayout(1, 3, 3, 3)); - for (JButton b : Button2) { + for (JButton b : rButton) { panel3.add(b); } panel2.add(panel3, BorderLayout.NORTH); - JButton[] Button1 = getButton1(); + // + JButton[] nButton = getNButton(); JPanel panel4 = new JPanel(); panel4.setLayout(new GridLayout(4, 5, 3, 5)); - for (JButton b : Button1) { + for (JButton b : nButton) { panel4.add(b); } panel2.add(panel4, BorderLayout.CENTER); @@ -66,42 +78,57 @@ public class Calculator extends JFrame { this.add(panel1); this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); this.setVisible(true); - } + } private JTextField getTextField() { text = new JTextField("0", 10); // text.setSize(480, 50); - return text; + return text;//返回 } - private JButton[] getButton1() { - String[] redButton = { "/", "*", "-", "+", "=", "MC", "MR", "MS", "M+" }; - JButton[] Button = new JButton[keys1.length]; - for (int i = 0; i < this.keys1.length; i++) { + private JButton[] getNButton(){ + String[] redButton = {"/","*","-","+","="}; + JButton[] nbutton = new JButton[keys1.length]; + for(int i = 0; i < this.keys1.length; i++){ JButton b = new JButton(this.keys1[i]); b.addActionListener(getActionListener()); - + Arrays.sort(redButton); - if (Arrays.binarySearch(redButton, keys1[i]) >= 0) { + if(Arrays.binarySearch(redButton, keys1[i]) >= 0){ b.setForeground(Color.red); - } else { + }else{ b.setForeground(Color.blue); } - Button[i] = b; + nbutton[i] = b; } - return Button; + return nbutton; } - private JButton[] getRButton2() { - JButton[] rButton = new JButton[keys2.length]; - for (int i = 0; i < this.keys2.length; i++) { - JButton b = new JButton(this.keys2[i]); - b.addActionListener(getActionListener()); - b.setForeground(Color.red); - rButton[i] = b; + private JButton[] getMButton(){ + JButton[] mbutton = new JButton[keys2.length + 1]; + mbutton[0] = getButton(); + for(int i = 0; i < this.keys2.length; i++){ + JButton b = new JButton(this.keys2[i]); + b.addActionListener(getActionListener()); + b.setForeground(Color.red); + mbutton[i+1] = b; + } + return mbutton; + } + private JButton[] getRButton(){ + JButton[] Button2 = new JButton[keys3.length]; + for(int i = 0; i < this.keys3.length; i++){ + JButton b = new JButton(this.keys3[i]); + b.addActionListener(getActionListener()); + b.setForeground(Color.red); + Button2[i] = b; + } + return Button2; + } + private JButton getButton(){ + button = new JButton(); + return button; } - return rButton; - } private ActionListener getActionListener() { ActionListener actionListener = new ActionListener() { @@ -168,9 +195,6 @@ public class Calculator extends JFrame { Calculator.this.flag = true; // 恢复初始化标记 } - public static void main(String[] args) { - new Calculator(); - } // 计算结果格式处理 public String format(double d) { String formatString = ""; @@ -199,6 +223,7 @@ public class Calculator extends JFrame { label_hint.setText(" "); // 清空提示显示框 } - public void setButton1(JButton[] button1) { + public static void main(String[] args) { + new Calculator(); } } -- Gitee From 6073a480eedf008615a2402c3601607b02543dd7 Mon Sep 17 00:00:00 2001 From: teddywm <20565438@qq.com> Date: Fri, 10 Jun 2022 02:40:42 +0800 Subject: [PATCH 5/5] =?UTF-8?q?=E5=8E=BB=E9=99=A4=E4=BA=86=E5=86=97?= =?UTF-8?q?=E9=A4=98=E8=AA=9E=E5=8F=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/java2022spring/3.txt | 0 src/java2022spring/Calculator.java | 52 +----------------------------- src/java2022spring/Run.java | 1 - 3 files changed, 1 insertion(+), 52 deletions(-) create mode 100644 src/java2022spring/3.txt diff --git a/src/java2022spring/3.txt b/src/java2022spring/3.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/java2022spring/Calculator.java b/src/java2022spring/Calculator.java index ccf624f..915e26e 100644 --- a/src/java2022spring/Calculator.java +++ b/src/java2022spring/Calculator.java @@ -156,37 +156,7 @@ public class Calculator extends JFrame { return actionListener; } - public class DataListener implements ActionListener { - @Override - public void actionPerformed(ActionEvent e) { - String str = e.getActionCommand();// 返回与此动作相关的命令字符串。 - if (Calculator.this.flag == true) {// 当想输入新的数字时,清空输入显示标签 - label_input.setText(" "); - Calculator.this.flag = false; - } - if (str.equals("(-)")) {// 当点击(-)时 - if (label_input.getText().indexOf("(-)") == -1) {// 如果此时显示框里还没出现(-)时 - label_input.setText(str); - } - } - if (!str.equals("(-)")) {// 当命令不是(-)时 - if (str.equals("AC")) { // 点击清零键时 - clear(); - } else if (str.equals(".")) { // 点击小数点时,小数点只能出现一次,不能在首位 - if (label_input.getText().indexOf(".") == -1 && !label_input.getText().equals(" ")) { - label_input.setText(label_input.getText() + str); - } else { - // clear(); - label_input.setText(label_input.getText() + str); - label_hint.setText("小数点不合法,请重新输入"); - } - } else { // 点击0,1,2,3,4,5,6,7,8,9时显示原数 - label_input.setText(label_input.getText() + str); - } - } - } - } // 清屏 public void clear() { label_hint.setText(" "); @@ -202,27 +172,7 @@ public class Calculator extends JFrame { formatString = nf.format(d); // 格式规范化 return formatString; // 返回格式化后的数据 } - // 返回上一级 - public void getBack() { - if (label_input.getText().length() <= 1) { // 长度小于等于1时清空显示框 - clear(); - } else { - String str = ""; - if (label_input.getText().length() == 3) { // 处理(-)问题,我把(-)看成算一个字符,要返回就整体返回 - String str1 = label_input.getText().substring(label_input.getText().length() - 3); - if (str1.equals("(-)")) { - str = " "; - } else { - str = label_input.getText().substring(0, label_input.getText().length() - 1); - } - } else { // 长度大于3时正常返回上一级 - str = label_input.getText().substring(0, label_input.getText().length() - 1); - } - label_input.setText(str); - } - label_hint.setText(" "); // 清空提示显示框 - } - + public static void main(String[] args) { new Calculator(); } diff --git a/src/java2022spring/Run.java b/src/java2022spring/Run.java index 76d7a68..5bb1252 100644 --- a/src/java2022spring/Run.java +++ b/src/java2022spring/Run.java @@ -11,7 +11,6 @@ public class Run { public String catNum(String cmd, String text) { String result = cmd; - // 如果text不等于0 if (!"0".equals(text)) { if (isSecondNum) { isSecondNum = false; -- Gitee