Почему метод bigQ.get() выдает значения массива букв не последовательно а через одну?

bigQ.get() который выдает содержимое массива, выдает его не последовательно. Программа должна вывести буквы, но выводит их через одну. Если присвоить переменной ch=bigQ.Get() - программа работает нормально

class Quen {
    char mas[];
    int setword, getword;

    Quen(int size) {
        mas = new char[size];
        setword = getword = 0;
    }

    void Set(char ch) {
        if (setword == mas.length) {
            System.out.println("Ocheredj zapolnena");
            return;
        }

        mas[setword++] = ch;
    }

    char Get() {
        if (getword == setword) {
            System.out.println("Ocheredj pusta");
            return '0';
        }
        return mas[getword++];
    }
}

class Prog68 {
    public static void main(String args[]) {
        Quen bigQ = new Quen(100);
        char ch;

        for (int i = 0; i < 26; i++) bigQ.Set((char) ('A' + i));

        System.out.println("Sodergimoe bigQ:");

        for (int i = 0; i < 26; i++) {
            if (bigQ.Get() != '0') {
                System.out.print(bigQ.Get() + " ");
            }
        }
    }
}

Ответы (1 шт):

Автор решения: Денис

Как оказалось, в рамках одного цикла каждый вызов метода bigQ.Get() возвращает новое значение, т.к. в теле метода у массива bigQ в регистре находился [счетчик итераций++]. Т.е мы вызываем метод дважды за шаг один итерации цикла, первое значение проверяется на соответствие управляющей инструкцией if а второе выводится на консоль методом Println.

При присваивании переменной ch значения из метода bigQ.Get() для проверки соответствия и вывода на консоль использовалась одна и та же переменная, а не разные, поэтому все работало корректно.

→ Ссылка