加()和减去方法

时间:2012-09-13 23:16:22

标签: java

好的,我会再试一次。我有一个非常基本的计算器应用程序我目前无法弄清楚如何使我的plus()和minus()方法起作用。每当我运行代码时,plus()方法都会添加currentValue + currentValue。我希望它像计算器一样,并将两个不同的整数相加。有什么建议吗?

digitButton(buttons, 0);
JButton plus = new JButton("+");
plus.addActionListener(new ActionListener() {
  public void actionPerformed(ActionEvent e)
  {
    myAccumulator.plus();
    updateDisplay();
  }
});
buttons.add(plus);
return buttons;

这是它被调用的地方。

这是我用我的plus()方法编写的课程。

public class BasicAccumulator implements Accumulator {

    private int digit;
    private int currentValue;

    public void BasicAccumulator(int digit, int currentValue)
    {
        this.digit = digit;
        this.currentValue = currentValue;
    }

    public void addDigit(int digit)
    {
        currentValue = currentValue * 10 + digit;
    }

    public void plus()
    {
        if (currentValue != 0)
            digit = currentValue;
            currentValue = currentValue + digit;

    }

    public void minus()
    {
        currentValue = currentValue - digit;
    }

    public void clear()
    {
        currentValue = 0;
    }

    public int displayValue()
    {
        return currentValue;
    }

}

5 个答案:

答案 0 :(得分:7)

想一想。当你按+时,你可能还没有输入第二个数字。也就是说,如果你的计算器打算像大多数计算器那样工作......

据推测,你有以下一系列事件......

  1. 输入数字:数字进入当前累加器以创建数字
  2. 按+:数字存储
  3. 输入数字,数字按1
  4. 累计
  5. 按=:当前累计的数字被添加到上一个。
  6. 为此,我会概念性地在累加器中存储3件事:

    • “左”值(等式的左侧) - 即按下+后存储的数字
    • 当前操作 - 最初没有任何内容,但会设置为指示是否为+或 - 。
    • 的值
    • 当前累计值(我只是称之为'正确')

    所以......最初,left为零,operation为零(即'清除')。

    State: left(0), operation(empty), right(0)
    

    键入一些数字......这些数字是在'右'中构建的。

    State: left(0), operation(empty), right(22)
    

    按+。现在,您将任何待处理操作应用于left。在这种情况下,操作为空,因此您只需复制值并清除“右”。然后将操作设置为“+”

    State: left(22), operation(+), right(0)
    

    您输入更多数字,再次构建right

    State: left(22), operation(+), right(20)
    

    你再次击中+。现在应用该操作。您将right添加到left并清除right

    State: left(42), operation(+), right(0)
    

    等等 ......

答案 1 :(得分:1)

您在两个位置使用digit:作为成员和addDigit的参数。前者似乎对我没有多大意义。

大多数基本操作(例如plus)需要两个数字才能使用。您要么必须将其中一个提供给函数调用,要么将它们存储在您的类中。您可以使用现有的digit成员作为后者,但除非您只想添加单个数字,否则我建议不要使用该名称。

相反,请考虑您的操作顺序。您输入两个号码然后按下操作按钮吗?如果是这样,您需要存储两个号码,例如valuecurrent。数字将附加到current,任何类似plus的操作都会将current添加到value,然后将current重置为零。显示应该在每次操作后反映value,但在每个数字后反映current,所以你需要一些布尔标志来区分这两种情况。

如果您输入一个号码,然后按操作键,然后输入另一个号码(中缀操作员),上述大多数建议仍然适用,但另外您需要一些方法来存储操作,同时读取第二个数。您可以使用某些字符,字符串,数字或枚举常量来完成此操作。我个人使用枚举常量来做这个,这些常量已经包含了计算该操作的指令,但这是非常高级的语法。按下每个操作按钮将评估先前存储的操作,然后存储新操作,除了“=”。

答案 2 :(得分:1)

这个至少看起来像是一个混乱的来源:

public void plus()
{
    if (currentValue != 0)
        digit = currentValue;
        currentValue = currentValue + digit;

}

当您添加支撑并修复缩进时,该代码实际上是:

public void plus()
{
    if (currentValue != 0)
    {
        digit = currentValue;
    }
    currentValue = currentValue + digit;
}

这实际上是你的意图吗?似乎不太可能。如果您希望缩进影响行为,则应将代码重写为:

public void plus()
{
    if (currentValue != 0)
    {
        digit = currentValue;
        currentValue = currentValue + digit;
    }
}

还不清楚为什么你首先想要这种行为。根据上一个问题的要求,如果您编写一个简短但完整的控制台应用程序来运行您的课程,以及预期的行为与实际行为。

答案 3 :(得分:0)

我建议做这样的事情。

int plus(int first, int second)
{
   return first + second;
}

这就是问题所在:

digit = currentValue;
currentValue = currentValue + digit;

您将数字设置为等于currentValue,使其变为

currentValue = currentValue + currentValue;

答案 4 :(得分:0)

在你正在做的plus()

digit = currentValue;
currentValue = currentValue + digit;

对我来说就像

currentValue = currentValue + currentValue

你应该使用

currentValue = currentValue + digit;