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
}
我正在尝试创建一个程序员计算器 (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
}