在Java中使用for循环显示队列

时间:2011-03-30 13:23:00

标签: java queue

我在Java中显示我的队列实现的内容。虽然环绕工作(队列的大小是3),但是当队列的前面大于后面时,我在显示队列时遇到了麻烦。

以下是我用来显示的代码:

     System.out.println("front");
     System.out.println("=====");
     if(front < rear ) {
         for(int i = front; i != rear; i++ ) {
              System.out.println(i +":> " + queue[i]);
         }
     }
     else {
         for(int i = front; i != rear; i= (i + 1) % SIZE ) {
              System.out.println(i +":> " + queue[i]);
         }
     }

     System.out.println("=====");

例如,假设前面是1,后面是0和SIZE = 3。 我的代码按此顺序打印出queue[1]queue[2]的内容。

为什么它会在i == 2时终止?不应i= (i + 1) % SIZEi的值更改为0,从而使其等于后方,然后打印出queue[0]的值?

4 个答案:

答案 0 :(得分:0)

假设SIZE = 3rear <= front,让我们说rear = 0front = 2,那么for循环的执行就像这样:

  1. 设置i = 2
  2. 执行正文
  3. 设置i = (2+1) % 3 = 0
  4. 检查i != rear0 != 0,这是假的,终止循环。
  5. 假设这是一个循环缓冲区,我会像这样迭代它:

    int i = front;
    do{
        System.out.println(i);
        i++;
        if(i >= SIZE){
            i = 0;
        }
    }while(i != (rear+1) % SIZE);
    

答案 1 :(得分:0)

当i == 2时,它将在当前迭代结束时变为0 然后i == 0,后面== 0,i ==后面,循环终止。

编辑:这有效,但看起来并不优雅

 int i = front;
 for(; i != rear; i= (i + 1) % SIZE ) {
          System.out.println(i +":> " + queue[i]);
 }
 System.out.println(i +":> " + queue[i]);

答案 2 :(得分:0)

除非这是作业,否则为什么不使用http://download.oracle.com/javase/6/docs/api/java/util/Queue.html

答案 3 :(得分:0)

当i ==后方时,你的循环将不会执行,因为i!=后面是假的。 如果你想循环,做一些像:

int i = front;
do{
    System.out.println(i +":> " + queue[i]);
    i=(i+1)%Size;
}while(i != front)