我遇到了问题。代码:
// withdraw method
public void withdraw(long n)
{
this.n = n;
Action a = new WithDraw();
a.doAction(n);
**if(actionsList.size() > 10)**
{
actionsList.poll();
actionsList.offer(a);
} else
{
actionsList.offer(a);
}
}
// Deposit method goes here
public void deposit(long n)
{
this.n = n;
Action a = new Deposit();
a.doAction(n);
**if(actionsList.size()<10)**
{
actionsList.offer(a);
} else
{
actionsList.poll();
actionsList.offer(a);
}
}
Main函数如下所示:
acc1.deposit(1);
acc1.withdraw(2);
acc1.deposit(3);
acc1.withdraw(4);
acc1.deposit(5);
acc1.withdraw(6);
acc1.deposit(7);
acc1.withdraw(8);
acc1.deposit(9);
acc1.withdraw(10);
acc1.deposit(11);
acc1.withdraw(12);
acc1.deposit(13);
acc1.withdraw(14);
acc1.deposit(15);
acc1.displayActions();
我需要10个最后添加的元素。在此之后我打印了11个元素而不是10.这有什么问题?也许我不正确理解队列大小()?
ADDED打印方式:
public void displayActions()
{
for(Action s : actionsList)
{
System.out.println(s);
}
}
答案 0 :(得分:2)
当大小等于10时,你仍然可以添加另一个,所以你得到11。
正如其他人提到的那样>
的反面是<=
>=
<
而==
!=
是public void withdraw(long n) {
queueAction(new Withdrawal(n));
}
public void deposit(long n) {
queueAction(new Deposit(n));
}
void queueAction(Action action) {
action.doAction();
if (actionsList.size() >= 10)
actionsList.poll();
actionsList.offer(aaction);
}
总之,你应该试试保持代码尽可能一致。如果代码应该做同样的事情,你应该以相同的方式编写代码,如果不使用方法来执行它们。
this.n = n;
我已经取出{{1}},因为这似乎没有做任何事情,在排队之前我没有看到执行操作的重点......
我不确定为什么我会想要默默地丢弃任何比过去10年更早的存款。我希望能够忽略我的一些提款。
答案 1 :(得分:1)
这不是从0开始的.size()的简单情况吗?
IE,0,1,2,3,4,5,6,7,8,9,10 = 11
答案 2 :(得分:0)
withdraw
为size() > 10
和deposit
size()<10
进行测试 - 但&lt; 10的反面不是> 10但是&gt; = 10