// Queue.java
// demonstrates queue
// to run this program: C>java QueueApp
class Queue
{
private int maxSize;
private long[] queArray;
private int front;
private int rear;
private int nItems;
public Queue(int s) // constructor
{
maxSize = s;
queArray = new long[maxSize];
front = 0;
rear = -1;
nItems = 0;
}
public void insert(long j)
{
if(rear == maxSize-1)
rear = -1;
queArray[++rear] = j;
nItems++;
}
public long remove()
{
long temp = queArray[front++];
if(front == maxSize)
front = 0;
nItems--;
return temp;
}
public long peekFront()
{
return queArray[front];
}
public boolean isEmpty() // true if queue is empty
{
return (nItems==0);
}
public boolean isFull() // true if queue is full
{
return (nItems==maxSize);
}
public int size() // number of items in queue
{
return nItems;
}
public void display()
{ int startFront = front;
for (int j = front ;j <nItems; j++)
{
System.out.println(queArray[j]);
if (j == nItems-1)
{ j=0;
System.out.println(queArray[j]);
}
if (j==startFront-1)
return;
}
}
}
class QueueApp
{
public static void main(String[] args)
{
Queue theQueue = new Queue(5); // queue holds 5 items
theQueue.insert(10); // insert 4 items
theQueue.insert(20);
theQueue.insert(30);
theQueue.insert(40);
theQueue.remove(); // remove 3 items
theQueue.remove(); // (10, 20, 30)
theQueue.remove();
theQueue.insert(50); // insert 4 more items
theQueue.insert(60); // (wraps around)
theQueue.insert(70);
theQueue.insert(80);
theQueue.display();
while(!theQueue.isEmpty()) // remove and display
{ // all items
long n = theQueue.remove(); // (40, 50, 60, 70, 80)
System.out.print(n);
System.out.print(" ");
}
System.out.println("");
} // end main()
} // end class QueueApp
さて、これは基本的な、本のうち、キューコードです。私は、キューを順番に、前面から背面に表示する表示方法を作成しようとしています。 (これは割り当てです、私はこれが実用的ではないことを知っています....)もし私がプログラムを実行していれば、それはフロントからリアまで順番にキューを表示します。私が抱えている問題は、もし私がnItemsを変更すると、動作しなくなります。たとえば、コード行を追加すると、theQueue.remove();ディスプレイへの呼び出しの直上で、メソッドは機能しなくなります。フロントは3に代わって4になり、フロントがになる必要があるforのメソッドには入りません.Itets、4 < 4は真ではないので、forループは開始しません。このJavaキューのdisplay()メソッドは[5]の代わりにすべての配列サイズで動作させるにはどうすればよいですか?
キューtheQueue =新しいキュー(5)。キューサイズを5にハードコードしないでください。入力がサイズを決定します。 Scannerを使用してキューサイズを問い合わせます。 – kosa