我正在构建这个玩具程序(一个带GUI的简单计算器),但我无法使其工作。虽然编译器显示一切正常,但当我点击“=”得到结果时它显示0.0。我想这是因为:
a)结果变量在OperatorButtons中实例化,因此一旦关闭实例,它的值就会设置为0。如果是这种情况,我应该把它放在主要部分吗?
b)由于某种原因,我想在OperatorButtons中使用switch是错误的。
//声明变量
private char previousOperator='+';
private char currentOperator=' ';
private double number1;
private double result=0;
private String numInStr="";
//设置数字按钮的事件处理程序
private void NmbrBtn(java.awt.event.ActionEvent evt) {
numInStr+=evt.getActionCommand();
number1=Double.parseDouble(numInStr);
tfDisplay.setText(numInStr);
}
//为操作员设置事件处理程序(程序必须跟踪前一个操作符和当前操作符)
private void OperatorButtons(java.awt.event.ActionEvent evt){
previousOperator=currentOperator;
currentOperator=evt.getActionCommand().charAt(0);
switch (previousOperator){
case '+':result+=number1;
case '-':result-=number1;
case '*':result*=number1;
case '/':result/=number1;
}
numInStr="";
}
//设置“=”
的处理程序 private void EqualsBtn(java.awt.event.ActionEvent evt) {
tfDisplay.setText(result+"");
}
答案 0 :(得分:3)
switch
个案例,在Java和几乎所有使用switch
构造的语言中,通过落到他们下面的那个,除非你使用break
。也就是说,如果previousOperator
为+
,那么result+=number1;
不仅会运行,还会运行result-=number1;
以及其后的其他两个语句。如果previousOperator
为*
,则result*=number1;
和result/=number1;
都会运行。
添加break
告诉编译器你不需要:
switch (previousOperator){
case '+':result+=number1;break;
case '-':result-=number1;break;
case '*':result*=number1;break;
case '/':result/=number1;break;
}
主观:空间等增强可读性,请考虑:
switch (previousOperator){
case '+': result += number1; break;
case '-': result -= number1; break;
case '*': result *= number1; break;
case '/': result /= number1; break;
}
注意看到应用运算符的容易程度。如果案例有break
以外的多个陈述(或者,在我看来,即使它没有),请使用换行符和缩进:
switch (previousOperator){
case '+':
result += number1;
break;
case '-':
result -= number1;
break;
case '*':
result *= number1;
break;
case '/':
result /= number1;
break;
}
...但是对于除break
以外的一个陈述,将它们全部放在一行上并不罕见。有空格。