java - 当我删除然后添加项目时,我的队列无法显示

标签 java queue

我修改了一个程序,该程序创建一个队列,然后向其中添加或删除项目。

我的代码中的问题是,在删除一个项目,然后添加一个项目后,它会进入无限循环,我不知道如何防止它发生。

我的目标是仅修改 display() 方法。

这是我显示队列的方式:

   public void display() 
   {
       int i = front;

           do {
               if (maxSize == nItems)
               {
                   if (i == size())
                       i = 0;

                   System.out.print(queArray[i++] + " ");
               }
               else if (maxSize < nItems)
               {
                   System.out.print("Too many queue items!");
                   break;
               }
               else
                   maxSize = nItems;
           }
           while (i != rear + 1 && !isEmpty());
       }

这是我添加和删除项目的方法:

   public void insert(long j)   // put item at rear of queue
      {
      if(rear == maxSize-1)         // deal with wraparound
         rear = -1;
      queArray[++rear] = j;         // increment rear and insert
      nItems++;                     // one more item
      }

   public long remove()         // take item from front of queue
      {
      long temp = queArray[front++]; // get value and incr front
      if(front == maxSize)           // deal with wraparound
         front = 0;
      nItems--;                      // one less item
      return temp;
      }

最佳答案

Queue

这是其源代码。

import java.util.Arrays;

public class Queue {

    private int enqueueIndex;// Separate index to ensure enqueue happens at the end
    private int dequeueIndex;// Separate index to ensure dequeue happens at the
                            // start
    private int[] items;
    private int count;
    // Lazy to add javadocs please provide
    public Queue(int size) {
        enqueueIndex = 0;
        dequeueIndex = 0;
        items = new int[size];
    }
    // Lazy to add javadocs please provide
    public void enqueue(int newNumber) {
        if (count == items.length)
            throw new IllegalStateException();
        items[enqueueIndex] = newNumber;
        enqueueIndex = ++enqueueIndex == items.length ? 0 : enqueueIndex;
        ++count;
    }
    // Lazy to add javadocs please provide
    public int dequeue() {
        if (count == 0)
            throw new IllegalStateException();
        int item = items[dequeueIndex];
        items[dequeueIndex] = 0;
        dequeueIndex = ++dequeueIndex == items.length ? 0 : dequeueIndex;
        --count;
        return item;
    }

    @Override
    public String toString() {
        return Arrays.toString(items);
    }
}

关于java - 当我删除然后添加项目时,我的队列无法显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12858483/

相关文章:

java - 将所选项目从上下文菜单发送到另一个 Activity

Delphi:线程作业的线程列表 - 排队

java - 队列数组实现resize

cocoa - 为特定单例创建 Grand Central Dispatch 队列

java - 反向链表Java内存

java - 如何初始化 spring-boot WebMvc? (ServletContext 始终为空)

java - 在类型 "rf"中找不到名为 "mp3_organizer"的方法的适用重载

Java 数据结构与 Redis

java - 在 gs-collections 库中寻找排序堆和并发队列

r - 如何检查向量是否是 LIFO/FIFO 递减