好的,我会再试一次。我有一个非常基本的计算器应用程序我目前无法弄清楚如何使我的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;
}
}
答案 0 :(得分:7)
想一想。当你按+时,你可能还没有输入第二个数字。也就是说,如果你的计算器打算像大多数计算器那样工作......
据推测,你有以下一系列事件......
为此,我会概念性地在累加器中存储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
成员作为后者,但除非您只想添加单个数字,否则我建议不要使用该名称。
相反,请考虑您的操作顺序。您输入两个号码然后按下操作按钮吗?如果是这样,您需要存储两个号码,例如value
和current
。数字将附加到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;
仅