下面的代码是来自Calculator的实际代码的一个块。它做的是用户按下计算器上的数字然后当他按下“+”时,文本字段上的数字被存储然后他按下一个数字并且当他按下“=”时它会被存储。然后在“=”中如果条件执行加法功能。现在我希望加法和减法一次运行,这是在做加法之后用户想做减法然后我将如何做????
if(a.getActionCommand().equals("+"))
{
q=tf.getText();
x=Integer.parseInt(q);
}
if(a.getActionCommand().equals("-"))
{
b=tf.getText();
t=Integer.parseInt(b);
}
if(a.getActionCommand().equals("="))
{
p=tf.getText();
y=Integer.parseInt(p);
z=x+y;
//z=t-y;
w=Integer.toString(z);
tf.setText(w);
}
答案 0 :(得分:1)
怎么样:接受一个负数作为输入,然后添加?或者我错过了这一点?
如果没有,那么使用RPN就可以了,根本不需要“=”。输入两个数字,然后“+”或“ - ”将两个操作数从堆栈中取出,应用运算符,然后将结果推回堆栈,显示它。
第三种方式:使用:
代替“ - ”的代码
if(a.getActionCommand().equals("-"))
{
b=tf.getText();
x=-(Integer.parseInt(b));
}
不确定我是否已将最后一项建议考虑在内,但这是一个开始。
答案 1 :(得分:1)
计算人员在处理=
或+
等操作时,通常会执行-
操作。试试吧,立即在您的计算机上打开calc应用程序并尝试3 + 5 - 1
。按-
时,显示屏将显示8
。您可以对自己的操作执行相同操作,并根据需要连续处理+
和-
个操作。将对您发布的代码进行一些重构,您可以做的一件事是将您用于=
操作的进程方法化。然后,您可以在每个performEquals
或+
块的开头调用-
。
答案 2 :(得分:1)
jcomeau_ictx建议的基于堆栈的算法是一个非常可行的解决方案。
创建两个堆栈:一个包含运算符(+, - ,*,/),另一个包含操作数(数组0-9)。
支持用户按下:3 + 4 - 5
Steps:
1.) Push '3' into the operand stack
2.) Push '+' into the operator stack
3.) Push '4' into the operand stack.
Since there are at least 2 operands, calculate 3 + 4 (which is 7).
4.) Pop 3 and 4. Add these two and pop them to the operand stack
5.) Pop + from the operator stack and push -.
6.) Push 5 onto the stack. Subtract these two and place result in operand stack.
通用算法:
Push operand (or operator) into the stack
if (operands > 2 && operator > 0)
pop both operands and one operator;
calculate result;
place result in operand stack;
reset operator stack;
答案 3 :(得分:0)
我假设您有4个操作(+, - ,×,÷),并且您正在实施未实现操作顺序的基本桌面计算器。在这种情况下,jcomeau_ictx's x=-(Integer.parseInt(b))
将不起作用,因为它只能处理减法,而不是乘法和除法,而这些基于堆栈的解决方案是过度的。
你是3个变量:firstNumber
,operation
和secondNumber
。 operation
开始为空(或使用一些表示“空”的值)。当用户点击=时,您需要做的是从显示中取出数字并将其放入secondNumber
。然后查看所有3个变量并执行operation
变量中的指示。
当用户点击+, - ,×或÷时,首先执行=操作(将用户的输入放入secondNumber
并执行operation
变量指示的操作)。将结果放入firstNumber
(如果您愿意,将其显示在屏幕上)。然后将用户命中的操作(+, - ,×或÷)存储在operation
变量中,以便您可以执行该操作下次用户点击+, - ,×,÷或=。