java简易计算器代码问答

问题遇到的现象和发生背景

麻烦您帮忙给我这段计算器代码详细的注释一下,感谢感谢

问题相关代码,请勿粘贴截图

//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//

import java.awt.GridLayout;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Calcultor215 {
TextField tf = new TextField(40);
StringBuffer s1 = new StringBuffer();
StringBuffer s2 = new StringBuffer();
static String flag = new String();
boolean start = true;

public Calcultor215() {
}

public void init() {
    JFrame f = new JFrame("计算器");
    JPanel p1 = new JPanel();
    p1.add(this.tf);
    f.add(p1, "North");
    JPanel p2 = new JPanel();
    p2.setLayout(new GridLayout(1, 3));
    ActionListener listen = new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            if (arg0.getActionCommand() == "0" && !Calcultor215.this.s1.toString().equals(new String())) {
                if (!Calcultor215.this.start) {
                    Calcultor215.this.s1.delete(0, Calcultor215.this.s1.length());
                }

                Calcultor215.this.start = true;
                Calcultor215.this.tf.setText(Calcultor215.this.s1.append("0").toString());
            }

            if (arg0.getActionCommand() == "1") {
                if (!Calcultor215.this.start) {
                    Calcultor215.this.s1.delete(0, Calcultor215.this.s1.length());
                }

                Calcultor215.this.start = true;
                Calcultor215.this.tf.setText(Calcultor215.this.s1.append("1").toString());
            }

            if (arg0.getActionCommand() == "2") {
                if (!Calcultor215.this.start) {
                    Calcultor215.this.s1.delete(0, Calcultor215.this.s1.length());
                }

                Calcultor215.this.start = true;
                Calcultor215.this.tf.setText(Calcultor215.this.s1.append("2").toString());
            }

            if (arg0.getActionCommand() == "3") {
                if (!Calcultor215.this.start) {
                    Calcultor215.this.s1.delete(0, Calcultor215.this.s1.length());
                }

                Calcultor215.this.start = true;
                Calcultor215.this.tf.setText(Calcultor215.this.s1.append("3").toString());
            }

            if (arg0.getActionCommand() == "4") {
                if (!Calcultor215.this.start) {
                    Calcultor215.this.s1.delete(0, Calcultor215.this.s1.length());
                }

                Calcultor215.this.start = true;
                Calcultor215.this.tf.setText(Calcultor215.this.s1.append("4").toString());
            }

            if (arg0.getActionCommand() == "5") {
                if (!Calcultor215.this.start) {
                    Calcultor215.this.s1.delete(0, Calcultor215.this.s1.length());
                }

                Calcultor215.this.start = true;
                Calcultor215.this.tf.setText(Calcultor215.this.s1.append("5").toString());
            }

            if (arg0.getActionCommand() == "6") {
                if (!Calcultor215.this.start) {
                    Calcultor215.this.s1.delete(0, Calcultor215.this.s1.length());
                }

                Calcultor215.this.start = true;
                Calcultor215.this.tf.setText(Calcultor215.this.s1.append("6").toString());
            }

            if (arg0.getActionCommand() == "7") {
                if (!Calcultor215.this.start) {
                    Calcultor215.this.s1.delete(0, Calcultor215.this.s1.length());
                }

                Calcultor215.this.start = true;
                Calcultor215.this.tf.setText(Calcultor215.this.s1.append("7").toString());
            }



            

            if (arg0.getActionCommand() == "8") {
                if (!Calcultor215.this.start) {
                    Calcultor215.this.s1.delete(0, Calcultor215.this.s1.length());
                }

                Calcultor215.this.start = true;
                Calcultor215.this.tf.setText(Calcultor215.this.s1.append("8").toString());
            }

            if (arg0.getActionCommand() == "9") {
                if (!Calcultor215.this.start) {
                    Calcultor215.this.s1.delete(0, Calcultor215.this.s1.length());
                }

                Calcultor215.this.start = true;
                Calcultor215.this.tf.setText(Calcultor215.this.s1.append("9").toString());
            }

            if (arg0.getActionCommand() == ".") {
                if (!Calcultor215.this.start) {
                    Calcultor215.this.s1.delete(0, Calcultor215.this.s1.length());
                }

                Calcultor215.this.start = true;
                if (Calcultor215.this.s1.toString().equals(new String())) {
                    Calcultor215.this.tf.setText(Calcultor215.this.s1.append("0.").toString());
                } else if (Calcultor215.this.s1.length() == 1 && Calcultor215.this.s1.charAt(0) == '-') {
                    Calcultor215.this.tf.setText(Calcultor215.this.s1.append("0.").toString());
                } else {
                    Calcultor215.this.tf.setText(Calcultor215.this.s1.append(".").toString());
                }
            }

            if (arg0.getActionCommand() == "+/-") {
                if (!Calcultor215.this.start) {
                    Calcultor215.this.s1.delete(0, Calcultor215.this.s1.length());
                }

                Calcultor215.this.start = true;
                if (Calcultor215.this.s1.toString().equals(new String())) {
                    Calcultor215.this.tf.setText(Calcultor215.this.s1.append('-').toString());
                }
            }

            if (arg0.getActionCommand() == "Backspace") {
                Calcultor215.this.start = true;
                if (Calcultor215.this.s1.length() != 0) {
                    Calcultor215.this.s1.deleteCharAt(Calcultor215.this.s1.length() - 1);
                    Calcultor215.this.tf.setText(Calcultor215.this.s1.toString());
                }
            }

            if (arg0.getActionCommand() == "CE") {
                Calcultor215.this.start = true;
                Calcultor215.this.s1.delete(0, Calcultor215.this.s1.length());
                Calcultor215.this.s2.delete(0, Calcultor215.this.s2.length());
                Calcultor215.this.tf.setText(Calcultor215.this.s1.toString());
            }

            if (arg0.getActionCommand() == "C") {
                Calcultor215.this.start = true;
                Calcultor215.this.s1.delete(0, Calcultor215.this.s1.length());
                Calcultor215.this.tf.setText(Calcultor215.this.s1.toString());
            }

            if (arg0.getActionCommand() == "+") {
                Calcultor215.this.start = true;
                Calcultor215.flag = "+";
                Calcultor215.this.s2.append(String.valueOf(Calcultor215.this.s1.toString()));
                Calcultor215.this.s1.delete(0, Calcultor215.this.s1.length());
                Calcultor215.this.tf.setText(Calcultor215.this.s1.toString());
            }

            if (arg0.getActionCommand() == "-") {
                Calcultor215.this.start = true;
                Calcultor215.flag = "-";
                Calcultor215.this.s2.append(String.valueOf(Calcultor215.this.s1.toString()));
                Calcultor215.this.s1.delete(0, Calcultor215.this.s1.length());
                Calcultor215.this.tf.setText(Calcultor215.this.s1.toString());
            }

            if (arg0.getActionCommand() == "*") {
                Calcultor215.this.start = true;
                Calcultor215.flag = "*";
                Calcultor215.this.s2.append(String.valueOf(Calcultor215.this.s1.toString()));
                Calcultor215.this.s1.delete(0, Calcultor215.this.s1.length());
                Calcultor215.this.tf.setText(Calcultor215.this.s1.toString());
            }

            if (arg0.getActionCommand() == "/") {
                Calcultor215.this.start = true;
                Calcultor215.flag = "/";
                Calcultor215.this.s2.append(String.valueOf(Calcultor215.this.s1.toString()));
                Calcultor215.this.s1.delete(0, Calcultor215.this.s1.length());
                Calcultor215.this.tf.setText(Calcultor215.this.s1.toString());
            }

            double s4;
            if (arg0.getActionCommand() == "sqrt") {
                Calcultor215.this.start = false;
                s4 = Double.parseDouble(Calcultor215.this.s1.toString());
                Calcultor215.this.s1.delete(0, Calcultor215.this.s1.length());
                Calcultor215.this.tf.setText(Calcultor215.this.s1.append(String.valueOf(Math.sqrt(s4))).toString());
            }

            if (arg0.getActionCommand() == "%") {
                Calcultor215.this.start = false;
                s4 = Double.parseDouble(Calcultor215.this.s1.toString());
                Calcultor215.this.s1.delete(0, Calcultor215.this.s1.length());
                Calcultor215.this.tf.setText(Calcultor215.this.s1.append(String.valueOf(s4 / 100.0D)).toString());
            }

            if (arg0.getActionCommand() == "1/x" && !Calcultor215.this.s1.toString().equals(new String()) && Double.parseDouble(Calcultor215.this.s1.toString()) != 0.0D) {
                Calcultor215.this.start = false;
                s4 = Double.parseDouble(Calcultor215.this.s1.toString());
                Calcultor215.this.s1.delete(0, Calcultor215.this.s1.length());
                Calcultor215.this.tf.setText(Calcultor215.this.s1.append(String.valueOf(1.0D / s4)).toString());
            }

            if (arg0.getActionCommand() == "=" && Calcultor215.this.s1.length() != 0 && Calcultor215.this.s2.length() != 0) {
                Calcultor215.this.start = false;
                s4 = Double.parseDouble(Calcultor215.this.s1.toString());
                double s3 = Double.parseDouble(Calcultor215.this.s2.toString());
                Calcultor215.this.s1.delete(0, Calcultor215.this.s1.length());
                Calcultor215.this.s2.delete(0, Calcultor215.this.s2.length());
                if (Calcultor215.flag == "+") {
                    Calcultor215.this.tf.setText(Calcultor215.this.s1.append(String.valueOf(s3 + s4)).toString());
                }

                if (Calcultor215.flag == "-") {
                    Calcultor215.this.tf.setText(Calcultor215.this.s1.append(String.valueOf(s3 - s4)).toString());
                }

                if (Calcultor215.flag == "*") {
                    Calcultor215.this.tf.setText(Calcultor215.this.s1.append(String.valueOf(s3 * s4)).toString());
                }

                if (Calcultor215.flag == "/") {
                    Calcultor215.this.tf.setText(Calcultor215.this.s1.append(String.valueOf(s3 / s4)).toString());
                }
            }

        }
    };
    JButton bks = new JButton("Backspace");
    bks.addActionListener(listen);
    JButton ce = new JButton("CE");
    ce.addActionListener(listen);
    JButton c = new JButton("C");
    c.addActionListener(listen);
    p2.add(bks);
    p2.add(ce);
    p2.add(c);
    f.add(p2);
    JPanel p3 = new JPanel();
    p3.setLayout(new GridLayout(4, 5));
    JButton b1 = new JButton("7");
    p3.add(b1);
    b1.addActionListener(listen);
    JButton b2 = new JButton("8");
    p3.add(b2);
    b2.addActionListener(listen);
    JButton b3 = new JButton("9");
    p3.add(b3);
    b3.addActionListener(listen);
    JButton b4 = new JButton("/");
    p3.add(b4);
    b4.addActionListener(listen);
    JButton b5 = new JButton("sqrt");
    p3.add(b5);
    b5.addActionListener(listen);
    JButton b6 = new JButton("4");
    p3.add(b6);
    b6.addActionListener(listen);
    JButton b7 = new JButton("5");
    p3.add(b7);
    b7.addActionListener(listen);
    JButton b8 = new JButton("6");
    p3.add(b8);
    b8.addActionListener(listen);
    JButton b9 = new JButton("*");
    p3.add(b9);
    b9.addActionListener(listen);
    JButton b10 = new JButton("%");
    p3.add(b10);
    b10.addActionListener(listen);
    JButton b11 = new JButton("1");
    p3.add(b11);
    b11.addActionListener(listen);
    JButton b12 = new JButton("2");
    p3.add(b12);
    b12.addActionListener(listen);
    JButton b13 = new JButton("3");
    p3.add(b13);
    b13.addActionListener(listen);
    JButton b14 = new JButton("-");
    p3.add(b14);
    b14.addActionListener(listen);
    JButton b15 = new JButton("1/x");
    p3.add(b15);
    b15.addActionListener(listen);
    JButton b16 = new JButton("0");
    p3.add(b16);
    b16.addActionListener(listen);
    JButton b17 = new JButton("+/-");
    p3.add(b17);
    b17.addActionListener(listen);
    JButton b18 = new JButton(".");
    p3.add(b18);
    b18.addActionListener(listen);
    JButton b19 = new JButton("+");
    p3.add(b19);
    b19.addActionListener(listen);
    JButton b20 = new JButton("=");
    p3.add(b20);
    b20.addActionListener(listen);
    f.add(p3, "South");
    f.setDefaultCloseOperation(2);
    f.pack();
    f.setVisible(true);
}

public static void main(String[] args) {
    (new Calcultor215()).init();
}

}

运行结果及报错内容
我的解答思路和尝试过的方法
我想要达到的结果
package com.test;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionListener;

public class Calcultor215 {
    // 数字输入框
    TextField tf = new TextField(40);
    // 运算的第一个数
    StringBuffer s1 = new StringBuffer();
    // 运算的第二个数
    StringBuffer s2 = new StringBuffer();
    // 运算符标志位
    static String flag = "";
    // 标志位,用于记录是否仍在继续输入数字或是运算符输入
    boolean start = true;

    public Calcultor215() {
    }

    public void init() {
        JFrame f = new JFrame("计算器");
        JPanel p1 = new JPanel();
        p1.add(this.tf);
        f.add(p1, "North");
        JPanel p2 = new JPanel();
        p2.setLayout(new GridLayout(1, 3));
        // 监听器,监听按钮点击事件
        ActionListener listen = arg0 -> {
            double s4;
            // 原代码用大量if进行判断,此处用switch-case进行优化
            switch (arg0.getActionCommand()){
                // 数字键点击0-9
                case "0":
                    // 不响应首位0
                    if ("".equals(Calcultor215.this.s1.toString())){
                        break;
                    }
                case "1":
                case "2":
                case "3":
                case "4":
                case "5":
                case "6":
                case "7":
                case "8":
                case "9":
                    if (!Calcultor215.this.start) {
                        Calcultor215.this.s1.delete(0, Calcultor215.this.s1.length());
                    }

                    Calcultor215.this.start = true;
                    Calcultor215.this.tf.setText(Calcultor215.this.s1.append(arg0.getActionCommand()).toString());
                    break;
                // 小数点点击
                case ".":
                    if (!Calcultor215.this.start) {
                        Calcultor215.this.s1.delete(0, Calcultor215.this.s1.length());
                    }

                    Calcultor215.this.start = true;
                    if ("".equals(Calcultor215.this.s1.toString())) {
                        Calcultor215.this.tf.setText(Calcultor215.this.s1.append("0.").toString());
                    } else if (Calcultor215.this.s1.length() == 1 && Calcultor215.this.s1.charAt(0) == '-') {
                        Calcultor215.this.tf.setText(Calcultor215.this.s1.append("0.").toString());
                    } else {
                        Calcultor215.this.tf.setText(Calcultor215.this.s1.append(".").toString());
                    }
                    break;
                // 正负号点击
                case "+/-":
                    if (!Calcultor215.this.start) {
                        Calcultor215.this.s1.delete(0, Calcultor215.this.s1.length());
                    }

                    Calcultor215.this.start = true;
                    if ("".equals(Calcultor215.this.s1.toString())) {
                        Calcultor215.this.tf.setText(Calcultor215.this.s1.append('-').toString());
                    }
                // 退格
                case "Backspace":
                    Calcultor215.this.start = true;
                    if (Calcultor215.this.s1.length() != 0) {
                        Calcultor215.this.s1.deleteCharAt(Calcultor215.this.s1.length() - 1);
                        Calcultor215.this.tf.setText(Calcultor215.this.s1.toString());
                    }
                    break;
                // 清除,删除两个输入的数
                case "CE":
                    Calcultor215.this.start = true;
                    Calcultor215.this.s1.delete(0, Calcultor215.this.s1.length());
                    Calcultor215.this.s2.delete(0, Calcultor215.this.s2.length());
                    Calcultor215.this.tf.setText(Calcultor215.this.s1.toString());
                    break;
                // 清除,删除第一个输入的数
                case "C":
                    Calcultor215.this.start = true;
                    Calcultor215.this.s1.delete(0, Calcultor215.this.s1.length());
                    Calcultor215.this.tf.setText(Calcultor215.this.s1.toString());
                    break;
                // 四则运算点击,状态存入运算符标志位flag
                case "+":
                case "-":
                case "*":
                case "/":
                    Calcultor215.this.start = true;
                    Calcultor215.flag = arg0.getActionCommand();
                    Calcultor215.this.s2.append(Calcultor215.this.s1.toString());
                    Calcultor215.this.s1.delete(0, Calcultor215.this.s1.length());
                    Calcultor215.this.tf.setText(Calcultor215.this.s1.toString());
                    break;
                // 将当前输入的数开方
                case "sqrt":
                    Calcultor215.this.start = false;
                    s4 = Double.parseDouble(Calcultor215.this.s1.toString());
                    Calcultor215.this.s1.delete(0, Calcultor215.this.s1.length());
                    Calcultor215.this.tf.setText(Calcultor215.this.s1.append(Math.sqrt(s4)).toString());
                    break;
                // 求百分比
                case "%":
                    Calcultor215.this.start = false;
                    s4 = Double.parseDouble(Calcultor215.this.s1.toString());
                    Calcultor215.this.s1.delete(0, Calcultor215.this.s1.length());
                    Calcultor215.this.tf.setText(Calcultor215.this.s1.append(s4 / 100.0D).toString());
                    break;
                // 求1除以当前输入数的结果
                case "1/x":
                    if (!"".equals(Calcultor215.this.s1.toString()) && Double.parseDouble(Calcultor215.this.s1.toString()) != 0.0D){
                        Calcultor215.this.start = false;
                        s4 = Double.parseDouble(Calcultor215.this.s1.toString());
                        Calcultor215.this.s1.delete(0, Calcultor215.this.s1.length());
                        Calcultor215.this.tf.setText(Calcultor215.this.s1.append(1.0D / s4).toString());
                    }
                    break;
                // 进行计算
                case "=":
                    if (Calcultor215.this.s1.length() != 0 && Calcultor215.this.s2.length() != 0){
                        Calcultor215.this.start = false;
                        s4 = Double.parseDouble(Calcultor215.this.s1.toString());
                        double s3 = Double.parseDouble(Calcultor215.this.s2.toString());
                        Calcultor215.this.s1.delete(0, Calcultor215.this.s1.length());
                        Calcultor215.this.s2.delete(0, Calcultor215.this.s2.length());
                        if ("+".equals(Calcultor215.flag)) {
                            Calcultor215.this.tf.setText(Calcultor215.this.s1.append((s3 + s4)).toString());
                        }

                        if ("-".equals(Calcultor215.flag)) {
                            Calcultor215.this.tf.setText(Calcultor215.this.s1.append((s3 - s4)).toString());
                        }

                        if ("*".equals(Calcultor215.flag)) {
                            Calcultor215.this.tf.setText(Calcultor215.this.s1.append(s3 * s4).toString());
                        }

                        if ("/".equals(Calcultor215.flag)) {
                            Calcultor215.this.tf.setText(Calcultor215.this.s1.append(s3 / s4).toString());
                        }
                    }
                    break;
                default:
            }
        };

        // 以下直至结束都是在构建计算器UI
        JButton bks = new JButton("Backspace");
        bks.addActionListener(listen);
        JButton ce = new JButton("CE");
        ce.addActionListener(listen);
        JButton c = new JButton("C");
        c.addActionListener(listen);
        p2.add(bks);
        p2.add(ce);
        p2.add(c);
        f.add(p2);
        JPanel p3 = new JPanel();
        p3.setLayout(new GridLayout(4, 5));

        // 原代码,此处构建UI有大量重复代码,简单优化用循环减少代码长度
        String[] list = new String[]{"7", "8","9","/","sqrt","4","5","6","*","%","1","2","3","-","1/x","0","+/-",".","+","="};
        for (String s : list){
            JButton b = new JButton(s);
            p3.add(b);
            b.addActionListener(listen);
        }

        f.add(p3, "South");
        f.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
        f.pack();
        f.setVisible(true);
    }

    public static void main(String[] args) {
        (new Calcultor215()).init();
    }
}