队列有什么问题?

时间:2013-10-27 10:28:15

标签: java

我遇到了问题。代码:

// 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);
        }
    }

3 个答案:

答案 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)

withdrawsize() > 10deposit size()<10进行测试 - 但&lt; 10的反面不是> 10但是&gt; = 10