尝试用 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 循环的意义何在?它正在创建您没有任何好处的范围界定问题。除非我遗漏了什么,否则这段代码甚至不应该运行。您还制作了x
和 y
相同的东西,因为您从同一个元素中提取它们的值。您的意思是让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 编写科学计算器但无法使指数按钮工作的主要内容,如果未能解决你的问题,请参考以下文章