簡體   English   中英

隊列出了什么問題?

[英]What's wrong with Queue?

我遇到了問題。 碼:

// 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個。這有什么問題? 也許我無法正確理解Queue size()?

添加的打印方法:

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

當大小等於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; 因為這似乎無能為力,而且我看不到在排隊之前執行動作的意義...

我不確定為什么我要靜默丟棄任何比最后10天還早的存款。我想忽略掉我的部分提款。

這不是.size()從0開始的簡單情況嗎?

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

對於withdraw您需要測試size() > 10以及deposit size()<10size()<10的反面不是> 10而是> = 10

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM