尝试用 Java 编写科学计算器但无法使指数按钮工作

Posted

技术标签:

【中文标题】尝试用 Java 编写科学计算器但无法使指数按钮工作【英文标题】:Trying to program a scientific calculator in java but can't get the exponent button to work 【发布时间】:2017-11-08 21:59:42 【问题描述】:

我正在尝试用 Java 编写一个带有 GUI 的科学计算器,到目前为止,除了指数按钮 (x^y) 之外,我已经能够完成所有操作。

这是我现在的按钮单击事件,但它不起作用,因为我不知道如何在只按下一次按钮时获取两个值。

private void btnExponentActionPerformed(java.awt.event.ActionEvent evt)                                             

    for (int i = 0; i < 2; i++)
    
        if(i == 0)
        
            double x = Double.parseDouble(String.valueOf(tfdDisplay.getText()));
        
        else if(i == 1)
        
            double y = Double.parseDouble(String.valueOf(tfdDisplay.getText()));
        
        tfdDisplay.setText(null);
    
    double ops = Math.pow(x, y);
    tfdDisplay.setText(String.valueOf(ops));
                                           

我希望它获取当前文本字段中的值,然后让用户单击指数按钮,然后将他们输入的下一个值作为实际指数值,然后在他们单击时计算答案“=”按钮。

我在网上查找了一个视频,该视频展示了如何制作带有指数按钮的科学计算器,但是当我按照他对按钮进行编码的方法时,它无法正常工作。相反,它只是将文本字段内的内容平方,而不是让用户输入他们自己的指数。

这是计算器实际外观的图片,以供参考。

pic

提前致谢!

编辑: 这是我为“=”按钮编写的程序。

String answer;
        secondnum = Double.parseDouble(tfdDisplay.getText());
        if(operations == "+")
        
            result = firstnum + secondnum;
            answer = String.format("%.2f", result);
            tfdDisplay.setText(answer);
        
        else if(operations == "-")
        
            result = firstnum - secondnum;
            answer = String.format("%.2f", result);
            tfdDisplay.setText(answer);
        
        else if(operations == "*")
        
            result = firstnum * secondnum;
            answer = String.format("%.2f", result);
            tfdDisplay.setText(answer);
        
        else if(operations == "/")
        
            result = firstnum / secondnum;
            answer = String.format("%.2f", result);
            tfdDisplay.setText(answer);
        

我应该将此添加到“=”按钮吗?

else if(operations == "^")
        
            result = Math.pow(firstnum, secondnum);
            answer = String.format("%.2f", result);
            tfdDisplay.setText(answer);
        

【问题讨论】:

for 循环的意义何在?它正在创建您没有任何好处的范围界定问题。除非我遗漏了什么,否则这段代码甚至不应该运行。您还制作了 xy 相同的东西,因为您从同一个元素中提取它们的值。您的意思是让y 由与tfdDisplay 不同的元素设置吗? 我认为您误解了文本字段的工作方式。它不会等待用户输入,因此您的第一个值将被解析,然后第二个值将始终为空,因为您在循环结束时将其清除。作为提示,您在问题中描述了如何解决此问题 - 您只需在按下指数按钮时获取第一个值,在按下等号按钮时获取第二个值。 【参考方案1】:

所以,如果我理解正确,你点击按钮digit,然后是^,然后是digit,然后是=,此时你有,例如2^4作为@中的文本987654326@ 元素。然后你应该做的是拆分文本并获取两个值,如下所示:

private void btnExponentActionPerformed(java.awt.event.ActionEvent evt) 
    // Notice the double backslash, it's used because split wants a regular
    // expression, and ^ means the beginning of the string in regular
    // expressions, so you have to escape it using a backslash. The other
    // one is needed because you should escape backslashes on strings to use
    // as is
    String parts[] = tfdDisplay.getText().split("\\^");
    double x = Double.parseDouble(parts[0]);
    double y = Double.parseDouble(parts[1]);
    double ops = Math.pow(x, y);
    tfdDisplay.setText(String.valueOf(ops));

【讨论】:

【参考方案2】:

所以我想出了如何解决我的问题。

这是我在按钮单击事件中放入的内容:

    private void btnExponentActionPerformed(java.awt.event.ActionEvent evt)                                             

        firstnum = Double.parseDouble(tfdDisplay.getText());
        tfdDisplay.setText(null);
        operations = "^";
                                               

这是我添加到“=”按钮单击事件的内容:

else if(operations == "^")

    result = Math.pow(firstnum, secondnum);
    answer = String.format("%.2f", result);
    tfdDisplay.setText(answer);

谢谢你!

【讨论】:

以上是关于尝试用 Java 编写科学计算器但无法使指数按钮工作的主要内容,如果未能解决你的问题,请参考以下文章

用JAVA编写一个计算器

《团队-科学计算器-需求分析》

使用 0 值指数或尾随 0 使科学计数法无效

Python:带有上标指数的科学记数法

html+css+js实现科学计算器

数据科学与机器学习相关的Python工具有哪些?