Почему метод 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() для проверки соответствия и вывода на консоль использовалась одна и та же переменная, а не разные, поэтому все работало корректно.