CircularFifoQueue在方法内部不起作用,而是使用什么?

时间:2017-10-01 08:59:51

标签: java queue fifo circular-buffer

我需要编写一个方法,它总是存储最后10个(newset)元素而且只有10.我尝试使用CircularFifoBuffer.It完全可以像这样使用:

 import java.util.ArrayList;
 import java.util.List;
 import java.util.Queue;
 import org.apache.commons.collections4.queue.CircularFifoQueue;

 public class Main {

public static void main(String[] args) {

    Queue<Integer> fifo = new CircularFifoQueue<Integer>(3);
    fifo.add(11);
    fifo.add(22);
    fifo.add(33);
    fifo.add(44);
    fifo.add(55);
    System.out.println(fifo); // [33, 44, 55]

但在方法中使用时它不起作用:

import java.util.ArrayList;
import java.util.List;
import java.util.Queue;
import org.apache.commons.collections4.queue.CircularFifoQueue;

public class TV {

   public int channelNumber = 11;

   public int getChannelNumber() {
      return channelNumber;
   }

   public void addToChannelsHistory(int channnelNumber) {
      Queue<Integer> fifo = new CircularFifoQueue<Integer>(3);
      fifo.add(channnelNumber);
      System.out.print(fifo);
   }
}

你可以帮忙改用它吗?

2 个答案:

答案 0 :(得分:1)

你必须使用属性的概念,属于你的类的成员,它是一个数据,而不是一个方法:

public class TV {

   private final Queue<Integer> fifo = new CircularFifoQueue<Integer>(3);

   public Queue<Integer> getChannelNumbers() {
      return fifo;
   }

   public Integer getChannelNumber() {
      return fifo.isEmpty() ? null : fifo.peek();
   }

   public void addToChannelsHistory(int channnelNumber) {
      fifo.add(channnelNumber);
   }

   public String toString() {
      return fifo.toString();
   }

   public static void main( String[] args ) {
      TV tv = new TV();
      tv.addToChannelsHistory(11);
      tv.addToChannelsHistory(22);
      tv.addToChannelsHistory(33);
      tv.addToChannelsHistory(44);
      tv.addToChannelsHistory(55);
      System.out.print( tv );
   }
}

答案 1 :(得分:0)

如果我误解了,请原谅我,但就我在本地复制这个问题而言,这是有效的。但是,在Java程序中,main方法是程序的入口点。如果您没有在main方法中实例化您的TV类,则addToChannelHistory方法永远不会运行。例如,这对我有用:

df2

运行该程序应该打印出33到控制台。