Java不同的Calculator基本功能问题?

时间:2010-11-28 04:03:50

标签: java

下面的代码是来自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);
}

4 个答案:

答案 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个变量:firstNumberoperationsecondNumberoperation开始为空(或使用一些表示“空”的值)。当用户点击=时,您需要做的是从显示中取出数字并将其放入secondNumber。然后查看所有3个变量并执行operation变量中的指示。

当用户点击+, - ,×或÷时,首先执行=操作(将用户的输入放入secondNumber并执行operation变量指示的操作)。将结果放入firstNumber(如果您愿意,将其显示在屏幕上)。然后将用户命中的操作(+, - ,×或÷)存储在operation变量中,以便您可以执行该操作下次用户点击+, - ,×,÷或=。