From 484fd985f2b13b330d48a3dc60d1892f9262f5ae Mon Sep 17 00:00:00 2001 From: DELL Date: Wed, 8 Jun 2022 21:11:12 +0800 Subject: [PATCH 1/6] =?UTF-8?q?v1=E7=95=8C=E9=9D=A2=E5=92=8C=E5=90=84?= =?UTF-8?q?=E6=9D=BF=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/java2022spring/Calculator.java | 131 +++++++++++++++++++++++++++++ 1 file changed, 131 insertions(+) create mode 100644 src/java2022spring/Calculator.java diff --git a/src/java2022spring/Calculator.java b/src/java2022spring/Calculator.java new file mode 100644 index 0000000..bb4ec2c --- /dev/null +++ b/src/java2022spring/Calculator.java @@ -0,0 +1,131 @@ +package java2022spring; +import javax.swing.*; +import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.math.BigDecimal; + +public class Calculator implements ActionListener { + + private JFrame frame = new JFrame(); + + private String[] keys = {"%", "CE", "C", "←", "n!", "aⁿ", "cos", "sin", "1⁄x", "x²", "√x", "÷", "7", "8", "9", + "×", "4", "5", "6", "-", "1", "2", "3", "+", "+/-", "0", ".", "="}; + private JButton button[] = new JButton[keys.length]; + private JTextField resultText = new JTextField("0"); + private JTextField processText = new JTextField(); + private boolean firstDigit = true; + private double resultNum = 0.0000; + private String operator = "="; + private boolean operateValidFlag = true; + + char charA; + + public Calculator() { + init(); + + frame.setTitle("计算器"); + frame.setSize(350, 550); + frame.setLocation(500, 300); + frame.setResizable(true); + frame.setVisible(true); + frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + } + + private void init() { + Color color1 = new Color(181, 181, 181); + Color color2 = new Color(126, 192, 238); + Color color3 = new Color(232, 232, 232); + //Color color4 = new Color(132, 132, 232); + + JPanel resultTextPanel = new JPanel(); + resultTextPanel.setLayout(new BorderLayout()); + resultTextPanel.setSize(400, 50); + resultTextPanel.add(resultText); + resultText.setFont(new Font("黑体", Font.BOLD, 55)); + resultText.setHorizontalAlignment(JTextField.RIGHT); + resultText.setEditable(false); + resultText.setBorder(null); + resultText.setBackground(color1); + + JPanel processTextPanel = new JPanel(); + processTextPanel.setLayout(new BorderLayout()); + processTextPanel.setSize(400, 50); + processTextPanel.add(processText); + processText.setFont(new Font("黑体", Font.PLAIN, 25)); + processText.setHorizontalAlignment(JTextField.RIGHT); + processText.setEditable(false); + processText.setBorder(null); + + processText.setBackground(color1); + + + JPanel keysPanel = new JPanel(); + + keysPanel.setLayout(new GridLayout(7, 4, 2, 2)); + + + for (int i = 0; i < 12; i++) { + button[i] = new JButton(keys[i]); + Dimension preferredSize = new Dimension(95, 50); + button[i].setPreferredSize(preferredSize); + keysPanel.add(button[i]); + button[i].setBackground(color3); + button[i].setForeground(Color.black); + button[i].setFont(new Font(Font.SERIF, Font.PLAIN, 18)); + if (i == 11 || i == 3) button[i].setFont(new Font(Font.SERIF, Font.PLAIN, 30)); + if (i == 1 || i == 2) button[i].setFont(new Font("黑体", Font.PLAIN, 18)); + button[i].setBorderPainted(false); + } + + + for (int i = 12; i < keys.length; i++) { + button[i] = new JButton(keys[i]); + Dimension preferredSize = new Dimension(95, 50); + button[i].setPreferredSize(preferredSize); + keysPanel.add(button[i]); + if ((i + 1) % 4 == 0) { + button[i].setBackground(color3); + button[i].setFont(new Font(Font.SERIF, Font.PLAIN, 30)); + } else { + button[i].setBackground(Color.white); + button[i].setFont(new Font("黑体", Font.BOLD, 20)); + } + if (i == 19) button[i].setFont(new Font(Font.SERIF, Font.PLAIN, 18)); + button[i].setForeground(Color.black); + + button[i].setBorderPainted(false); + } + button[27].setBackground(color2); + + keysPanel.setBackground(color1); + + frame.getContentPane().add("North", processTextPanel); + frame.getContentPane().add("Center", resultTextPanel); + frame.getContentPane().add("South", keysPanel); + processTextPanel.setBorder(BorderFactory.createMatteBorder(25, 3, 0, 3, color1)); + resultTextPanel.setBorder(BorderFactory.createMatteBorder(0, 3, 5, 3, color1)); + keysPanel.setBorder(BorderFactory.createMatteBorder(5, 3, 5, 3, color1)); + + for (int i = 0; i < keys.length; i++) { + button[i].addActionListener(this); + } + } + + + + public static void main(String[] args) { + new Calculator(); + } + + + @Override + public void actionPerformed(ActionEvent e) { + // TODO Auto-generated method stub + + } + +} + + + -- Gitee From 49f5bb9147b8df0e5aa2c40732e90dc878471eb0 Mon Sep 17 00:00:00 2001 From: DELL Date: Thu, 9 Jun 2022 00:23:19 +0800 Subject: [PATCH 2/6] =?UTF-8?q?v2=20=E5=88=A0=E9=99=A4=E9=94=AE=E6=B8=85?= =?UTF-8?q?=E9=99=A4=E9=94=AE=E8=BF=94=E5=9B=9E=E9=94=AE=EF=BC=8C=E8=BF=98?= =?UTF-8?q?=E6=9C=89=E8=BE=93=E5=85=A5=E7=9A=84=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/java2022spring/Calculator.java | 82 +++++++++++++++++++++++------- 1 file changed, 63 insertions(+), 19 deletions(-) diff --git a/src/java2022spring/Calculator.java b/src/java2022spring/Calculator.java index bb4ec2c..adf6adb 100644 --- a/src/java2022spring/Calculator.java +++ b/src/java2022spring/Calculator.java @@ -3,6 +3,8 @@ import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; +import java.text.DecimalFormat; +import java.math.BigInteger; import java.math.BigDecimal; public class Calculator implements ActionListener { @@ -11,12 +13,12 @@ public class Calculator implements ActionListener { private String[] keys = {"%", "CE", "C", "←", "n!", "aⁿ", "cos", "sin", "1⁄x", "x²", "√x", "÷", "7", "8", "9", "×", "4", "5", "6", "-", "1", "2", "3", "+", "+/-", "0", ".", "="}; - private JButton button[] = new JButton[keys.length]; + private JButton button[] = new JButton[keys.length]; private JTextField resultText = new JTextField("0"); private JTextField processText = new JTextField(); private boolean firstDigit = true; private double resultNum = 0.0000; - private String operator = "="; + private String operator = "="; private boolean operateValidFlag = true; char charA; @@ -27,14 +29,15 @@ public class Calculator implements ActionListener { frame.setTitle("计算器"); frame.setSize(350, 550); frame.setLocation(500, 300); - frame.setResizable(true); + frame.setResizable(true); frame.setVisible(true); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } + private void init() { Color color1 = new Color(181, 181, 181); - Color color2 = new Color(126, 192, 238); + Color color2 = new Color(126, 192, 238); Color color3 = new Color(232, 232, 232); //Color color4 = new Color(132, 132, 232); @@ -42,9 +45,9 @@ public class Calculator implements ActionListener { resultTextPanel.setLayout(new BorderLayout()); resultTextPanel.setSize(400, 50); resultTextPanel.add(resultText); - resultText.setFont(new Font("黑体", Font.BOLD, 55)); + resultText.setFont(new Font("黑体", Font.BOLD, 55)); resultText.setHorizontalAlignment(JTextField.RIGHT); - resultText.setEditable(false); + resultText.setEditable(false); resultText.setBorder(null); resultText.setBackground(color1); @@ -53,18 +56,15 @@ public class Calculator implements ActionListener { processTextPanel.setSize(400, 50); processTextPanel.add(processText); processText.setFont(new Font("黑体", Font.PLAIN, 25)); - processText.setHorizontalAlignment(JTextField.RIGHT); + processText.setHorizontalAlignment(JTextField.RIGHT); processText.setEditable(false); processText.setBorder(null); processText.setBackground(color1); - JPanel keysPanel = new JPanel(); - keysPanel.setLayout(new GridLayout(7, 4, 2, 2)); - for (int i = 0; i < 12; i++) { button[i] = new JButton(keys[i]); Dimension preferredSize = new Dimension(95, 50); @@ -78,7 +78,6 @@ public class Calculator implements ActionListener { button[i].setBorderPainted(false); } - for (int i = 12; i < keys.length; i++) { button[i] = new JButton(keys[i]); Dimension preferredSize = new Dimension(95, 50); @@ -94,7 +93,7 @@ public class Calculator implements ActionListener { if (i == 19) button[i].setFont(new Font(Font.SERIF, Font.PLAIN, 18)); button[i].setForeground(Color.black); - button[i].setBorderPainted(false); + button[i].setBorderPainted(false); } button[27].setBackground(color2); @@ -112,20 +111,65 @@ public class Calculator implements ActionListener { } } - + public void actionPerformed(ActionEvent ev) { - public static void main(String[] args) { - new Calculator(); + String command = ev.getActionCommand(); + + if (command.equals(keys[3])) doBackspace(); + else if (command.equals(keys[1])) resultText.setText("0"); + else if (command.equals(keys[2])) doC(); + else if ("0123456789.".indexOf(command) >= 0) doNumber(command); + else if (command.equals(keys[0]) || command.equals(keys[4]) || command.equals(keys[6]) + || command.equals(keys[7]) || command.equals(keys[8]) || command.equals(keys[9]) + || command.equals(keys[10]) || command.equals(keys[24])) doOperator1(command); + else doOperator2(command); } - @Override - public void actionPerformed(ActionEvent e) { - // TODO Auto-generated method stub + private void doOperator1(String command) { + // TODO 自动生成的方法存根 } -} + private void doOperator2(String command) { + // TODO 自动生成的方法存根 + + } + private void doBackspace() { + String text = resultText.getText(); + int i = text.length(); + if (i > 0) { + text = text.substring(0, i - 1); + if (text.length() == 0) { + resultText.setText("0"); + firstDigit = true; + operator = "="; + } else { + resultText.setText(text); + } + } + } + + private void doC() { + processText.setText(null); + resultText.setText("0"); + firstDigit = true; + operator = "="; + } + + private void doNumber(String key) { + if (firstDigit) { + resultText.setText(null); + resultText.setText(key); + + } else if ((key.equals(".")) && (resultText.getText().indexOf(".") < 0)) { + resultText.setText(resultText.getText() + "."); + } else if (!key.equals(".")) { + resultText.setText(resultText.getText() + key); + } + firstDigit = false; + } +} \ No newline at end of file -- Gitee From 90200e297ce719446240129bdc5a1eed89cac80a Mon Sep 17 00:00:00 2001 From: DELL Date: Thu, 9 Jun 2022 00:25:22 +0800 Subject: [PATCH 3/6] =?UTF-8?q?v2=20=E5=88=A0=E9=99=A4=E9=94=AE=E6=B8=85?= =?UTF-8?q?=E9=99=A4=E9=94=AE=E8=BF=94=E5=9B=9E=E9=94=AE=EF=BC=8C=E8=BE=93?= =?UTF-8?q?=E5=85=A5=E7=9A=84=E7=AC=AC=E4=B8=80=E4=B8=AA=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .settings/org.eclipse.core.resources.prefs | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 .settings/org.eclipse.core.resources.prefs diff --git a/.settings/org.eclipse.core.resources.prefs b/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 0000000..6f9fabc --- /dev/null +++ b/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +encoding//src/java2022spring/Calculator.java=UTF-8 -- Gitee From 6708ffcdbf8233523e7f6dc4e16b47ee3bbef381 Mon Sep 17 00:00:00 2001 From: DELL Date: Thu, 9 Jun 2022 19:56:47 +0800 Subject: [PATCH 4/6] =?UTF-8?q?v3=20=E8=BF=90=E7=AE=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/java2022spring/Calculator.java | 109 +++++++++++++++++++++++++---- 1 file changed, 95 insertions(+), 14 deletions(-) diff --git a/src/java2022spring/Calculator.java b/src/java2022spring/Calculator.java index adf6adb..3c803d3 100644 --- a/src/java2022spring/Calculator.java +++ b/src/java2022spring/Calculator.java @@ -126,19 +126,7 @@ public class Calculator implements ActionListener { } - private void doOperator1(String command) { - // TODO 自动生成的方法存根 - - } - - - private void doOperator2(String command) { - // TODO 自动生成的方法存根 - - } - - - private void doBackspace() { + private void doBackspace() { String text = resultText.getText(); int i = text.length(); if (i > 0) { @@ -172,4 +160,97 @@ public class Calculator implements ActionListener { } firstDigit = false; } -} \ No newline at end of file + + + private void doOperator1(String key) { + operator = key; + if (operator.equals("1⁄x")) { + if (resultNum == 0) { + operateValidFlag = false; + resultText.setText("除数不能为零"); + } else { + resultNum = 1 / getNumberFromText(); + processText.setText("1/(" + resultText.getText() + ")"); + } + } else if (operator.equals("√x")) { + if (resultNum < 0) { + operateValidFlag = false; + resultText.setText("无效输入"); + } else { + resultNum = Math.sqrt(getNumberFromText()); + processText.setText("√(" + resultText.getText() + ")"); + } + } else if (operator.equals("x²")) { + resultNum = getNumberFromText() * getNumberFromText(); + processText.setText("sqr(" + resultText.getText() + ")"); + } else if (operator.equals("%")) { + resultNum = getNumberFromText() / 100; + } else if (operator.equals("n!")) { + BigInteger num = new BigInteger("1"); + BigInteger flat = new BigInteger("1"); + for (int i = 0; i < getNumberFromText(); i++) { + flat = flat.multiply(num); + num = num.add(new BigInteger("1")); + } + resultNum = flat.floatValue(); + processText.setText("fact(" + resultText.getText() + ")"); + } else if (operator.equals("cos")) { + resultNum = Math.cos(getNumberFromText()); + processText.setText("cos(" + resultText.getText() + ")"); + } else if (operator.equals("sin")) { + resultNum = Math.sin(getNumberFromText()); + processText.setText("sin(" + resultText.getText() + ")"); + } else if (operator.equals("+/-")) { + resultNum = getNumberFromText() * (-1); + } + isOperateValidFlag(operateValidFlag); + firstDigit = true; + if (operateValidFlag == false) processText.setText(null); + operateValidFlag = true; + } + + + private void isOperateValidFlag(boolean operateValidFlag2) { + // TODO 自动生成的方法存根 + + } + + + private void doOperator2(String key) { + if (operator.equals("÷")) { + if (getNumberFromText() == 0.0) { + operateValidFlag = false; + resultText.setText("除数不能为零"); + } else { + resultNum /= getNumberFromText(); + } + } else if (operator.equals("+")) { + resultNum += getNumberFromText(); + } else if (operator.equals("-")) { + resultNum -= getNumberFromText(); + } else if (operator.equals("×")) { + resultNum *= getNumberFromText(); + } else if (operator.equals("=")) { + resultNum = getNumberFromText(); + processText.setText(null); + } else if (operator.equals("aⁿ")) { + resultNum = Math.pow(resultNum, getNumberFromText()); + } + + } + + private double getNumberFromText() { + double result = 0; + try { + result = Double.valueOf(resultText.getText()).doubleValue(); + } catch (NumberFormatException e) { + } + return result; + } + + public static void main(String[] args) { + new Calculator(); + } + +} + -- Gitee From 5ec358c15e99e36cd30bfbe05b779be3b8ebc5ed Mon Sep 17 00:00:00 2001 From: DELL Date: Thu, 9 Jun 2022 20:51:55 +0800 Subject: [PATCH 5/6] =?UTF-8?q?v4=20=E6=96=B9=E6=B3=95=E5=AE=8C=E5=96=84?= =?UTF-8?q?=EF=BC=8C=E5=B0=8F=E6=95=B0=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/java2022spring/Calculator.java | 54 +++++++++++++++++++++++++----- 1 file changed, 46 insertions(+), 8 deletions(-) diff --git a/src/java2022spring/Calculator.java b/src/java2022spring/Calculator.java index 3c803d3..aa00884 100644 --- a/src/java2022spring/Calculator.java +++ b/src/java2022spring/Calculator.java @@ -210,13 +210,7 @@ public class Calculator implements ActionListener { } - private void isOperateValidFlag(boolean operateValidFlag2) { - // TODO 自动生成的方法存根 - - } - - - private void doOperator2(String key) { + private void doOperator2(String key) { if (operator.equals("÷")) { if (getNumberFromText() == 0.0) { operateValidFlag = false; @@ -237,6 +231,51 @@ public class Calculator implements ActionListener { resultNum = Math.pow(resultNum, getNumberFromText()); } + if (key.equals("+") || key.equals("×") || key.equals("÷") || key.equals("=")) { + processText.setText(processText.getText() + resultText.getText() + key); + } else if (key.equals("-")) { + processText.setText(processText.getText() + resultText.getText() + "-"); + } else if (key.equals("aⁿ")) { + processText.setText(processText.getText() + resultText.getText() + "^"); + + } + + isOperateValidFlag(operateValidFlag); + operator = key; + firstDigit = true; + if (operateValidFlag == false) { + processText.setText(null); + } + operateValidFlag = true; + } + + private void isOperateValidFlag(boolean operateValidFlag) { + if (operateValidFlag) { + long t1 = (long) resultNum; + double t2 = resultNum - t1; + BigDecimal bd = new BigDecimal(String.valueOf(resultNum)); + if (t2 == 0) { + resultText.setText(String.valueOf(t1)); + } else if (bd.scale() == 1) { + resultText.setText(String.valueOf(new DecimalFormat("0.0").format(resultNum))); + } else if (bd.scale() == 2) { + resultText.setText(String.valueOf(new DecimalFormat("0.00").format(resultNum))); + } else if (bd.scale() == 3) { + resultText.setText(String.valueOf(new DecimalFormat("0.000").format(resultNum))); + } else if (bd.scale() == 4) { + resultText.setText(String.valueOf(new DecimalFormat("0.0000").format(resultNum))); + } else if (bd.scale() == 5) { + resultText.setText(String.valueOf(new DecimalFormat("0.00000").format(resultNum))); + } else if (bd.scale() == 6) { + resultText.setText(String.valueOf(new DecimalFormat("0.000000").format(resultNum))); + } else if (bd.scale() == 7) { + resultText.setText(String.valueOf(new DecimalFormat("0.0000000").format(resultNum))); + } else if (bd.scale() == 8) { + resultText.setText(String.valueOf(new DecimalFormat("0.00000000").format(resultNum))); + } else { + resultText.setText(String.valueOf(new DecimalFormat("0.000000000").format(resultNum))); + } + } } private double getNumberFromText() { @@ -253,4 +292,3 @@ public class Calculator implements ActionListener { } } - -- Gitee From 928f02fb0a8c43a58a52e9283e5e383f977b5507 Mon Sep 17 00:00:00 2001 From: DELL Date: Thu, 9 Jun 2022 21:55:37 +0800 Subject: [PATCH 6/6] =?UTF-8?q?v5=20=E8=B4=9F=E6=95=B0=E6=B2=A1=E6=9C=89?= =?UTF-8?q?=E9=98=B6=E4=B9=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/java2022spring/Calculator.java | 60 ++++++++++++++++-------------- 1 file changed, 32 insertions(+), 28 deletions(-) diff --git a/src/java2022spring/Calculator.java b/src/java2022spring/Calculator.java index aa00884..5b7a09d 100644 --- a/src/java2022spring/Calculator.java +++ b/src/java2022spring/Calculator.java @@ -13,13 +13,13 @@ public class Calculator implements ActionListener { private String[] keys = {"%", "CE", "C", "←", "n!", "aⁿ", "cos", "sin", "1⁄x", "x²", "√x", "÷", "7", "8", "9", "×", "4", "5", "6", "-", "1", "2", "3", "+", "+/-", "0", ".", "="}; - private JButton button[] = new JButton[keys.length]; + private JButton button[] = new JButton[keys.length]; private JTextField resultText = new JTextField("0"); private JTextField processText = new JTextField(); private boolean firstDigit = true; - private double resultNum = 0.0000; - private String operator = "="; - private boolean operateValidFlag = true; + private double resultNum = 0.0000; + private String operator = "="; + private boolean operateValidFlag = true; char charA; @@ -29,7 +29,7 @@ public class Calculator implements ActionListener { frame.setTitle("计算器"); frame.setSize(350, 550); frame.setLocation(500, 300); - frame.setResizable(true); + frame.setResizable(true); frame.setVisible(true); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } @@ -37,26 +37,25 @@ public class Calculator implements ActionListener { private void init() { Color color1 = new Color(181, 181, 181); - Color color2 = new Color(126, 192, 238); + Color color2 = new Color(126, 192, 238); Color color3 = new Color(232, 232, 232); - //Color color4 = new Color(132, 132, 232); JPanel resultTextPanel = new JPanel(); resultTextPanel.setLayout(new BorderLayout()); resultTextPanel.setSize(400, 50); resultTextPanel.add(resultText); - resultText.setFont(new Font("黑体", Font.BOLD, 55)); - resultText.setHorizontalAlignment(JTextField.RIGHT); - resultText.setEditable(false); - resultText.setBorder(null); + resultText.setFont(new Font("黑体", Font.BOLD, 55)); + resultText.setHorizontalAlignment(JTextField.RIGHT); + resultText.setEditable(false); + resultText.setBorder(null); resultText.setBackground(color1); JPanel processTextPanel = new JPanel(); processTextPanel.setLayout(new BorderLayout()); processTextPanel.setSize(400, 50); processTextPanel.add(processText); - processText.setFont(new Font("黑体", Font.PLAIN, 25)); - processText.setHorizontalAlignment(JTextField.RIGHT); + processText.setFont(new Font("黑体", Font.PLAIN, 25)); + processText.setHorizontalAlignment(JTextField.RIGHT); processText.setEditable(false); processText.setBorder(null); @@ -75,7 +74,7 @@ public class Calculator implements ActionListener { button[i].setFont(new Font(Font.SERIF, Font.PLAIN, 18)); if (i == 11 || i == 3) button[i].setFont(new Font(Font.SERIF, Font.PLAIN, 30)); if (i == 1 || i == 2) button[i].setFont(new Font("黑体", Font.PLAIN, 18)); - button[i].setBorderPainted(false); + button[i].setBorderPainted(false); } for (int i = 12; i < keys.length; i++) { @@ -166,7 +165,7 @@ public class Calculator implements ActionListener { operator = key; if (operator.equals("1⁄x")) { if (resultNum == 0) { - operateValidFlag = false; + operateValidFlag = false; resultText.setText("除数不能为零"); } else { resultNum = 1 / getNumberFromText(); @@ -174,7 +173,7 @@ public class Calculator implements ActionListener { } } else if (operator.equals("√x")) { if (resultNum < 0) { - operateValidFlag = false; + operateValidFlag = false; resultText.setText("无效输入"); } else { resultNum = Math.sqrt(getNumberFromText()); @@ -186,14 +185,20 @@ public class Calculator implements ActionListener { } else if (operator.equals("%")) { resultNum = getNumberFromText() / 100; } else if (operator.equals("n!")) { - BigInteger num = new BigInteger("1"); - BigInteger flat = new BigInteger("1"); - for (int i = 0; i < getNumberFromText(); i++) { - flat = flat.multiply(num); - num = num.add(new BigInteger("1")); - } - resultNum = flat.floatValue(); - processText.setText("fact(" + resultText.getText() + ")"); + if (getNumberFromText() < -1) { + operateValidFlag = false; + resultText.setText("无效输入"); + } else { + BigInteger num = new BigInteger("1"); + BigInteger flat = new BigInteger("1"); + for (int i = 0; i < getNumberFromText(); i++) { + flat = flat.multiply(num); + num = num.add(new BigInteger("1")); + } + resultNum = flat.floatValue();//BigInteger转换为float + processText.setText("fact(" + resultText.getText() + ")"); + } + } else if (operator.equals("cos")) { resultNum = Math.cos(getNumberFromText()); processText.setText("cos(" + resultText.getText() + ")"); @@ -213,7 +218,7 @@ public class Calculator implements ActionListener { private void doOperator2(String key) { if (operator.equals("÷")) { if (getNumberFromText() == 0.0) { - operateValidFlag = false; + operateValidFlag = false; resultText.setText("除数不能为零"); } else { resultNum /= getNumberFromText(); @@ -241,7 +246,7 @@ public class Calculator implements ActionListener { } isOperateValidFlag(operateValidFlag); - operator = key; + operator = key; firstDigit = true; if (operateValidFlag == false) { processText.setText(null); @@ -290,5 +295,4 @@ public class Calculator implements ActionListener { public static void main(String[] args) { new Calculator(); } - -} +} \ No newline at end of file -- Gitee