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/1 (2).txt b/src/java2022spring/1 (2).txt new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/src/java2022spring/2.txt b/src/java2022spring/2.txt new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/src/java2022spring/3.txt b/src/java2022spring/3.txt new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/src/java2022spring/Calculator.java b/src/java2022spring/Calculator.java new file mode 100644 index 0000000000000000000000000000000000000000..915e26e18773a8fb4d94f32937d4ec634271a4e0 --- /dev/null +++ b/src/java2022spring/Calculator.java @@ -0,0 +1,179 @@ +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.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 = { "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[] 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 : rButton) { + panel3.add(b); + } + panel2.add(panel3, BorderLayout.NORTH); + + // + JButton[] nButton = getNButton(); + JPanel panel4 = new JPanel(); + panel4.setLayout(new GridLayout(4, 5, 3, 5)); + for (JButton b : nButton) { + 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[] 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){ + b.setForeground(Color.red); + }else{ + b.setForeground(Color.blue); + } + nbutton[i] = b; + } + return nbutton; + } + + 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; + } + private ActionListener getActionListener() { + ActionListener actionListener = new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + String cmd = e.getActionCommand(); + String result = null; + try { + result = running.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 void clear() { + label_hint.setText(" "); + label_input.setText(" "); + label_result.setText("0"); + Calculator.this.flag = true; // 恢复初始化标记 + } + + // 计算结果格式处理 + public String format(double d) { + String formatString = ""; + NumberFormat nf = NumberFormat.getInstance(); // 放回当前默认语言环境的通用数字格式 + formatString = nf.format(d); // 格式规范化 + return formatString; // 返回格式化后的数据 + } + + public static void main(String[] args) { + new Calculator(); + } +} diff --git a/src/java2022spring/Math.java b/src/java2022spring/Math.java new file mode 100644 index 0000000000000000000000000000000000000000..310277080ddd7fb84adfe12c3335495e3ae42be3 --- /dev/null +++ b/src/java2022spring/Math.java @@ -0,0 +1,37 @@ +package java2022spring; + +import java.math.BigDecimal; + +public class Math { + /** + * 为一个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(); + } + @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/Run.java b/src/java2022spring/Run.java new file mode 100644 index 0000000000000000000000000000000000000000..5bb12524925193f24ce6fa80aa2e78e9ae0feaf7 --- /dev/null +++ b/src/java2022spring/Run.java @@ -0,0 +1,137 @@ +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; + 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); + } + } +}