NetBeans Java计算器查询
我有一个小问题,就是当我乘以5*5的时候,答案是25。但是当乘以5*5*5时,答案仍然是25。。帮忙 变量NetBeans Java计算器查询,java,netbeans,calculator,helpers,Java,Netbeans,Calculator,Helpers,我有一个小问题,就是当我乘以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 = fa
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);
}
您正在将输入(5*5
)解析为Double
,结果是5
,因为*5
不是Double
的一部分
然后将input
分配给total
。然后将input
与total
相乘,得到25
你的逻辑正是按照它被告知的去做,然而你真的想要计算一些东西。这将更加困难
在5*5*5
的情况下,您的输入将再次仅为5
我已经为您的程序解释了为什么5*5=25
和5*5*5=25
解决方案是制作某种解析引擎,其翻译如下:
5*5
tomul(5,5)
5*5*5
tomul(5,mul(5,5))
然后让Java操作支持它来真正计算它。您的函数private void btnMultiActionPerformed(Java.awt.event.ActionEvent evt)
每次都在重置textarea。。。因此,无论何时调用它,它只会满足单一值,而不会满足旧结果。。。
从该函数中删除以下行并检查。。。我想这会解决问题的
txtArea.setText(null);
如果您需要每次重置文本区域,那么考虑下面的解决方案…
解决方案:
步骤1:在声明变量total
时,还需要使用0.0对其进行初始化
第2步:对您的对账单进行以下检查,即total=input代码>在btn执行的多重操作中
功能
检查:
if (total > 0.0)
total = total * input;
else
total = input;
这肯定能帮你完成任务
悬空指针问题在于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);
}
您需要嵌套乘法或使用ScriptEngine.eval运算符。我找不到位置。。。你正在做的5*5*5。。。与其他情况一样,如果(multi==true){input=Double.parseDouble(txtArea.getText());total=input*total;}只反映乘法,而不反映任何5*5*5…您做得对可能是一些UI问题。更新问题中的完整代码。您是否尝试过我的答案。。。User2964786先生他没有解析5*5,请仔细阅读代码。每次执行操作时,他都会清除txtarea@vels4j所以他第一次解析5
,然后所有输入都神奇地消失了。我想我已经说过了,如果我错了,请纠正我。您将输入(5*5)解析为Double,结果是5这是错误的,无法解析字符串5*5。假设你喜欢在计算器里做运算。按5->Press*->Press 5->Press=@vels4j我想他使用的是JTextArea
,并且有一个JButton
来计算结果。至少这是他的代码所暗示的。因此,他似乎一次就解析了整个JTextArea.getText()
。他解析了整个JTextArea.getText()是的,但每次操作他都会清除文本区域。文本区域从来没有像5×5这样的文本,这个解决方案将是错误的,考虑用户第一次来到应用程序的场景…那么total将不等于零,因为它没有初始化,然后它将进入else部分,其中total将与输入相乘,并存储在total中。。。这将导致不稳定和不必要的结果。@DanglingPointer:您错了,它永远不会出错,因为在Java中,double默认初始化为零,请参阅“确定…”。。。但它是由0.0初始化的,因为它是一个双精度值,而不是0。@悬挂指针:你又错了,Java有,如果其中一个操作数是double类型,另一个将转换为double。
另请参阅。祝您好运,JavaI没有说它会产生任何错误。。。但是在阅读了上面提到的链接之后。。。我写了评论,是的。。。if条件将满足0或0.0。。。