0

我遇到了问题。代码:

// 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 个。这有什么问题?也许我不正确理解队列大小()?

添加打印方法:

public void displayActions()
    {
        for(Action s : actionsList)
        {
            System.out.println(s);
        }
    }
4

3 回答 3

2

当大小等于 10 时,您仍然可以添加另一个,因此您得到 11。

正如其他人所提到的,is 和 is>的对立面总之<=你 应该尽量保持你的代码尽可能一致。如果代码应该做同样的事情,你应该以同样的方式编写它,如果不使用一种方法来完成它们。>=<==!=

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;因为这似乎没有做任何事情,而且我没有看到在排队之前执行操作的意义......

我不知道为什么我想默默地丢弃任何超过过去 10 年的存款。不过,我希望能够忽略我的一些提款。

于 2013-10-27T11:02:09.143 回答
1

这不是 .size() 从 0 开始的简单情况吗?

即,0、1、2、3、4、5、6、7、8、9、10 = 11

于 2013-10-27T10:51:26.403 回答
0

withdraw你测试size() > 10deposit size()<10- 但 <10 的反面不是 >10 而是 >=10

于 2013-10-27T10:55:58.880 回答