Различные выходные данные, основанные на том, как я вызываю метод get () - PullRequest
0 голосов
/ 04 октября 2018

Учитывая приведенный ниже код в методе main() при вызове метода get() в классе Queue, когда я делаю это, выходные данные отличаются от способа, изложенного ниже:

Все показанные буквыв выводе этого кода, как и ожидалось :

class Queue {
    char get() {
        if (getlock == putlock) {
            System.out.println("-Queue is empty");
            return (char) 0;
        }
        return q[getlock++];
    }
}

public static void main(String[] args) {
    Queue bigQ = new Queue(100);
    Queue smallQ = new Queue(4);

    char ch;
    int i;

    System.out.println("Using bigQ to store the alphabet. ");
    for (i = 0; i < 26; i++)
        bigQ.put((char)('A' + i));

    System.out.print("Contents of bigQ: ");

    for (i = 0; i < 26; i++) {
        ch = bigQ.get();
        if (ch != (char) 0)
            System.out.print(ch);
    }
}

Однако, когда я не использую char ch в main(), а вместо этого повторно вызываю bigQ.get() напрямую, он показывает только каждыйтретье письмоЯ устал и не могу понять почему.Измененный фрагмент кода приведен ниже:

В выходных данных этого кода показаны только каждые третьи буквы

    for (i = 0; i < 26; i++) {
        bigQ.get(); 
        if (bigQ.get() != (char) 0)     
            System.out.print(bigQ.get());
    }

Небольшое изменение и такая разница.Я был бы признателен, если бы вы сообщили мне, почему это так, потому что я действительно не понимаю.

1 Ответ

0 голосов
/ 04 октября 2018

Ваш get метод разрушителен.Каждый раз, когда она называется, очередь продвигается вперед - кусок кода getlock++.В своем фрагменте измененного кода вы вызываете get три раза за каждую итерацию, отбрасывая два результата.

В отличие от английского, get в Java обычно зарезервирован для методов, которые не изменяют состояние (кроме JSF),java.util.Queue использует poll, тогда как remove выдаст исключение, если очередь пуста.take также является популярным выбором для такого рода методов.

...