gpt4 book ai didi

java - 玩具程序中的逻辑错误(使用计算器运算符的 Switch)

转载 作者:行者123 更新时间:2023-12-01 22:31:47 24 4
gpt4 key购买 nike

我正在构建这个玩具程序(一个带有 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+"");
}

最佳答案

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 之外的一条语句,将它们全部放在一行上并不罕见。带空格。

关于java - 玩具程序中的逻辑错误(使用计算器运算符的 Switch),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27617573/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com