试图用java编写一个科学计算器,但可以';我不能让指数按钮工作

试图用java编写一个科学计算器,但可以';我不能让指数按钮工作,java,calculator,pow,exponent,Java,Calculator,Pow,Exponent,我正在尝试用java编写一个带有GUI的科学计算器,到目前为止,除了指数按钮(x^y)之外,我什么都能做 下面是我现在为按钮点击事件准备的东西,但它不起作用,因为我不知道如何在只按一次按钮的情况下获取两个值 private void btnExponentActionPerformed(java.awt.event.ActionEvent evt) { for (int i = 0; i <

我正在尝试用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));
}                                           
我应该将此添加到“=”按钮吗


因此,如果我理解正确,您可以点击按钮
digit
,然后点击
^
,然后点击
digit
,然后点击
=
,此时,例如,
2^4
作为
tfdDisplay
元素中的文本。然后,您应该拆分文本并获得两个值,如下所示:

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));
}

因此,如果我理解正确,您可以点击按钮
digit
,然后点击
^
,然后点击
digit
,然后点击
=
,此时,例如,
2^4
作为
tfdDisplay
元素中的文本。然后,您应该拆分文本并获得两个值,如下所示:

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));
}

所以我想出了解决问题的办法

下面是我在按钮单击事件中放置的内容:

    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);
}
下面是我添加到“=”按钮单击事件中的内容:

    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);
}

谢谢你,欧比塞雷

所以我想出了解决问题的办法

下面是我在按钮单击事件中放置的内容:

    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);
}
下面是我添加到“=”按钮单击事件中的内容:

    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);
}

谢谢你,欧比塞雷

for循环的意义是什么?它造成了你所面临的范围界定问题,而没有任何好处。这段代码不应该运行,除非我遗漏了什么。您还使
x
y
成为相同的东西,因为您从同一元素中提取它们的值。您的意思是让
y
由与
tfdDisplay
不同的元素设置吗?我想您误解了文本字段的工作方式。它不会等待用户输入,因此您的第一个值将被解析,然后第二个值将始终为空,因为您在循环结束时清除了它。作为提示,您在问题中描述了如何解决此问题-您只需要在按下“指数”按钮时获取第一个值,在按下“等于”按钮时获取第二个值。for循环的意义是什么?它造成了你所面临的范围界定问题,而没有任何好处。这段代码不应该运行,除非我遗漏了什么。您还使
x
y
成为相同的东西,因为您从同一元素中提取它们的值。您的意思是让
y
由与
tfdDisplay
不同的元素设置吗?我想您误解了文本字段的工作方式。它不会等待用户输入,因此您的第一个值将被解析,然后第二个值将始终为空,因为您在循环结束时清除了它。作为提示,您在问题中描述了如何解决此问题-您只需要在按下“指数”按钮时获取第一个值,在按下“等于”按钮时获取第二个值。