Не работает код из книги Шилдта
Упражнение из главы о классах и методах. Сделал всё один в один (или нет?). Сначала дам код, а ниже напишу, что происходит
public class Help {
void HelpOn(int what) {
switch (what) {
case '1':
System.out.println("Оператор if\n");
System.out.println("if(условие) оператор;");
System.out.println("else оператор;");
break;
case '2':
System.out.println("Оператор switch\n");
System.out.println("switch (выражение){");
System.out.println("case константа: ");
System.out.println("последовательность операторов");
System.out.println("break;");
break;
case '3':
System.out.println("Оператор for\n");
System.out.println("for (инициализация; условие; итерация)");
System.out.println("оператор;");
break;
case '4':
System.out.println("Оператор while\n");
System.out.println("while (условие) оператор;");
break;
case '5':
System.out.println("Оператор do-while\n");
System.out.println("do { оператор } while (условие)");
break;
case '6':
System.out.println("Оператор break\n");
System.out.println("break; или break меткаж");
break;
case '7':
System.out.println("Оператор continue\n");
System.out.println("continue; или continue меткаж");
break;
}
System.out.println();
}
void showmenu() {
System.out.println("Справка: ");
System.out.println("1. if ");
System.out.println("2. switch");
System.out.println("3. for");
System.out.println("4. while");
System.out.println("5. do while");
System.out.println("6. break");
System.out.println("7. continue");
System.out.println("ВЫберите (q - выход): ");
}
boolean isvalid(int ch) {
if (ch < '1' | ch > '7' & ch != 'q') return false;
else return true;
}
}
class HelpClassDemo {
public static void main(String args[])
throws java.io.IOException {
char choice, ignore;
Help hlpobj = new Help();
for ( ; ; ) {
do {
hlpobj.showmenu();
choice = (char) System.in.read();
do {
ignore = (char) System.in.read();
} while (ignore != '\n');
} while (hlpobj.isvalid(choice));
if (choice == 'q') break;
System.out.println("\n");
hlpobj.HelpOn(choice);
}
}
}
Короче при введении цифры не выполняется почему-то метод показа справки HelpOn(). После ввода цифры просто появляется еще раз справка с повторной просьбой ввести цифру. Есть чувство, что что-то не так с boolean методом, но не пойму, что. Проверял раз 5 на соответствие с тем, что в книге, но в книге после этого кода просто идёт водичка без примера работы, ссылаясь на то, что оно работает так же, как и в старом примере без методов.
UPD Попробовал поменять тип переменной what в методе HelpOn на char
void HelpOn(char what)
Не помогло
UPD Есть понимание, что, что бы я не вводил, он всё равно выводит справку (вводимый char вообще не воспринимается программой)
Ответы (1 шт):
Нашёл ошибку. В последнем while в условии пропущен "!" перед условием, что означает что относящийся к нему do будет выполняться, пока этот while true.