我遇到一个小问题,即当我乘以例如5 * 5时,答案将是25.但是当乘以5 * 5 * 5时答案仍然会保持25 ..帮助?
变量
public class Calculator extends javax.swing.JFrame {
double total;
double input;
boolean plus = false;
boolean multi = false;
boolean division = false;
boolean minus = false;
}
“乘法”按钮
private void btnMultiActionPerformed(java.awt.event.ActionEvent evt) {
input = Double.parseDouble(txtArea.getText());
total = input;
multi = true;
txtArea.setText(null);
}
等于按钮
private void btnEqualsActionPerformed(java.awt.event.ActionEvent evt) {
if (plus == true )
{
input = Double.parseDouble(txtArea.getText());
total = input + total;
}
else if (minus == true)
{
input = Double.parseDouble(txtArea.getText());
total = input - total;
}
else if (multi == true)
{
input = Double.parseDouble(txtArea.getText());
total = input * total;
}
else if (division == true)
{
input = Double.parseDouble(txtArea.getText());
total = input / total;
}
else
{
}
txtArea.setText("" +total);
}
答案 0 :(得分:1)
您正在将输入(5*5
)解析为Double
,其结果为5
,因为*5
不属于Double
。< / p>
然后您将input
分配给total
。然后,将input
与total
相乘,得到25。
你的逻辑正是按照它所做的去做,但是你想真正计算一些东西。这将更加困难。
如果5*5*5
input
,5
将只是5*5 = 25
。
我已为您的计划解释了原因5*5*5 = 25
和5*5
。
解决方案是制作某种解析引擎,其翻译方式如下:
mul(5, 5)
至5*5*5
mul(5, mul(5, 5))
至{{1}} 然后让它背后的Java操作来真正计算它。
答案 1 :(得分:0)
你的函数private void btnMultiActionPerformed(java.awt.event.ActionEvent evt)
每次都会重置textarea ...所以每当你打电话给它时,它只会提供一个值而不会满足旧的结果......
从此函数中删除以下行并检查...我猜它会解决问题
txtArea.setText(null);
如果您每次都需要重置文本区域,请考虑以下解决方案......
<强>解决方案:强>
第1步:在声明变量total
时,您还需要使用0.0初始化它。
第2步:对您的陈述执行以下检查,即total = input;
函数中的btnMultiActionPerformed
。
检查:
if (total > 0.0)
total = total * input;
else
total = input;
这绝对可以帮到你。
悬空指针
答案 2 :(得分:0)
问题在于 btnMultiActionPerformed 方法中未经检查的分配。
total = input;
因此,每次单击“乘法”按钮时,旧结果都会丢失 检查分配应按如下方式进行:
private void btnMultiActionPerformed(java.awt.event.ActionEvent evt) {
input = Double.parseDouble(txtArea.getText());
//perform check below, instead of unchecked assignment
if (total == 0)
total = input;
else
total *= input;
multi = true;
txtArea.setText(null);
}