Java 程序员的计算器(在if语句中初始化)

Java Programmer's Calculator (initialization in if statement)

我正在尝试创建一个程序员计算器 (GUI),它将值从一种基本形式转换为另一种形式。

这是我遇到困难的动作侦听器片段

 private class RdoHandler implements ActionListener {

    @Override
    public void actionPerformed(ActionEvent ae) {
        String temp = txt.getText();
        int prev = 0;
        JRadioButton jb = (JRadioButton) ae.getSource();


        if (jb == BIN) {

            btnA.setEnabled(false);
            btnB.setEnabled(false);
            btnC.setEnabled(false);
            btnD.setEnabled(false);
            btnE.setEnabled(false);
            btnF.setEnabled(false);
            btn0.setEnabled(!false);
            btn1.setEnabled(!false);
            btn2.setEnabled(false);
            btn3.setEnabled(false);
            btn4.setEnabled(false);
            btn5.setEnabled(false);
            btn6.setEnabled(false);
            btn7.setEnabled(false);
            btn8.setEnabled(false);
            btn9.setEnabled(false);

            temp = txt.getText();
            if (prev == 3) {
                temp = Integer.toBinaryString(Integer.parseInt(txt.getText(), 8));
                txt.setText(temp);

            } else if (prev == 2) {
                temp = Integer.toBinaryString(Integer.parseInt(txt.getText(), 16));
                txt.setText(temp);

            } else if (prev == 4) {
                temp = Integer.toBinaryString(Integer.parseInt(txt.getText()));
                txt.setText(temp);

            } else {
                txt.setText("");
            }

            prev = 1;

        }
        if (jb == HEX) {

            btnA.setEnabled(!false);
            btnB.setEnabled(!false);
            btnC.setEnabled(!false);
            btnD.setEnabled(!false);
            btnE.setEnabled(!false);
            btnF.setEnabled(!false);
            btn0.setEnabled(!false);
            btn1.setEnabled(!false);
            btn2.setEnabled(!false);
            btn3.setEnabled(!false);
            btn4.setEnabled(!false);
            btn5.setEnabled(!false);
            btn6.setEnabled(!false);
            btn7.setEnabled(!false);
            btn8.setEnabled(!false);
            btn9.setEnabled(!false);
            temp = txt.getText();

            if (prev == 1) {
                temp = Integer.toHexString(Integer.parseInt(txt.getText(), 2));
                txt.setText(temp);


            } else if (prev == 3) {
                temp = Integer.toHexString(Integer.parseInt(txt.getText(), 8));
                txt.setText(temp);


            } else if (prev == 4) {
                temp = Integer.toHexString(Integer.parseInt(txt.getText()));
                txt.setText(temp);


            } 
            prev = 2;

        }
        if (jb == OCT) {

            btnA.setEnabled(false);
            btnB.setEnabled(false);
            btnC.setEnabled(false);
            btnD.setEnabled(false);
            btnE.setEnabled(false);
            btnF.setEnabled(false);
            btn0.setEnabled(!false);
            btn1.setEnabled(!false);
            btn2.setEnabled(!false);
            btn3.setEnabled(!false);
            btn4.setEnabled(!false);
            btn5.setEnabled(!false);
            btn6.setEnabled(!false);
            btn7.setEnabled(!false);
            btn8.setEnabled(false);
            btn9.setEnabled(false);

            temp = txt.getText();

            if (prev == 1) {
                temp = Integer.toOctalString(Integer.parseInt(txt.getText(), 2));
                txt.setText(temp);
            } else if (prev == 2) {
                temp = Integer.toOctalString(Integer.parseInt(txt.getText(), 16));
                txt.setText(temp);
            } else if (prev == 4) {
                temp = Integer.toOctalString(Integer.parseInt(txt.getText()));
                txt.setText(temp);
            }

            prev = 3;
        }
        if (jb == DEC) {

            btnA.setEnabled(false);
            btnB.setEnabled(false);
            btnC.setEnabled(false);
            btnD.setEnabled(false);
            btnE.setEnabled(false);
            btnF.setEnabled(false);
            btn0.setEnabled(!false);
            btn1.setEnabled(!false);
            btn2.setEnabled(!false);
            btn3.setEnabled(!false);
            btn4.setEnabled(!false);
            btn5.setEnabled(!false);
            btn6.setEnabled(!false);
            btn7.setEnabled(!false);
            btn8.setEnabled(!false);
            btn9.setEnabled(!false);

            temp = txt.getText();

            if (prev == 1) {
                temp = Integer.toString(Integer.parseInt(txt.getText(), 2));
                txt.setText(temp);
            } else if (prev == 3) {
                temp = Integer.toString(Integer.parseInt(txt.getText(), 8));
                txt.setText(temp);
            } else if (prev == 2) {
                temp = Integer.toString(Integer.parseInt(txt.getText(), 16));
                txt.setText(temp);
            }
            prev = 4;


        }

    }

}

如您所见,我使用 prev 来确定该值是二进制、八进制、十六进制还是十进制。

问题是,当我在 if 语句中初始化 prev 的值时,prev 的值恢复为 0。请帮忙:)

计算器中每次按下按钮都会调用 actionperformed()。将 prev 作为全局变量并使用它,否则你将按照你提到的那样重新初始化它。

每次执行操作(因此输入 actionPerformed())时,prev 的值会返回到 0,因为会创建一个新的基元 prev .

解决方案是将初始化移到 actionPerformed()

之外

解决方案

int prev = 0;
public void actionPerformed(ActionEvent ae) {
    // Stuff
}