Отображение очереди, использующей цикл for в Java - PullRequest
1 голос
/ 30 марта 2011

Я показываю содержимое моей реализации очереди в 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) % SIZE изменить значение i на 0 и, таким образом, сделать его равным тылу, а затем распечатать значение queue[0]?

Ответы [ 4 ]

0 голосов
/ 30 марта 2011

Когда я == задний, ваш цикл не будет выполняться, потому что я! = Задний является ложным. Если вы хотите зациклить, сделайте что-то вроде:

int i = front;
do{
    System.out.println(i +":> " + queue[i]);
    i=(i+1)%Size;
}while(i != front)
0 голосов
/ 30 марта 2011

когда i == 2, он станет 0 в конце текущей итерации.
Тогда я == 0, тыл == 0, я == тыл, цикл заканчивается.

РЕДАКТИРОВАТЬ: Это работает, но не выглядит элегантно

 int i = front;
 for(; i != rear; i= (i + 1) % SIZE ) {
          System.out.println(i +":> " + queue[i]);
 }
 System.out.println(i +":> " + queue[i]);
0 голосов
/ 30 марта 2011

Если это не домашнее задание, почему бы не использовать http://download.oracle.com/javase/6/docs/api/java/util/Queue.html?

0 голосов
/ 30 марта 2011

Предположим, SIZE = 3 и rear <= front, скажем, rear = 0, front = 2, тогда выполнение вашего цикла for делает что-то вроде:

  1. Set i = 2
  2. Выполнить тело
  3. Установить i = (2+1) % 3 = 0
  4. Проверить i != rear или 0 != 0, это ложно, завершить цикл.

Предполагается, что этокольцевой буфер, я бы повторил это так:

int i = front;
do{
    System.out.println(i);
    i++;
    if(i >= SIZE){
        i = 0;
    }
}while(i != (rear+1) % SIZE);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...