2

キューを作成し、それにアイテムを追加または削除するプログラムを変更しました。

私のコードの問題は、1つのアイテムを削除してからアイテムを追加すると、無限ループに陥り、それを防ぐ方法がわからないことです。

私の目標は、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;
      }
4

1 に答える 1

2

列

これが同じもののソースコードです。

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);
    }
}
于 2012-10-12T11:59:28.633 に答える