Вопрос? В чём причина?

213
22 декабря 2017, 01:25

/*При вводе n-го количества символов при условии, что первый введённый символ находится в диапазоне от 1 до 5 программа работает не корректно. */

public class Help2 {
    public static void main(String[] args) throws IOException {
        char choice, ignore;
        do {
            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\n");
            System.out.print("Выберите: ");
            choice = (char) System.in.read();
            do {
                ignore = (char) System.in.read();
            } while(ignore != '\n');
        } while(choice < '1' | choice > '5');
        System.out.println("\n");
        switch(choice) {
            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");
                System.out.println(" // ...");
                System.out.println("}");
                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 {");
                System.out.println("оператор;");
                System.out.println("} while(условие);");
                break;
        }
    }
}
Answer 1

Подумайте сами внимательно, представьте, что это не Java, а вы выполняете свою программу. Посмотрите вот на этот фрагмент вашего кода:

do {
    // тут что-то пишем  
    // Потом вводим, напр. "123\n"
    choice = (char) System.in.read();  // ввели choice = '1'.  
    do {
        ignore = (char) System.in.read(); // Читаем все остальное - '2', '3', '\n'
                                              // * choice не меняется, '1'    
    } while(ignore != '\n');              // Пока не встретили '\n'. 
                                              // * choice по-прежнему == '1'
} while(choice < '1' | choice > '5');     // choice == '1', выходим из цикла
                                              // * Вышли из цикла, choise == '1'
// Выводим описание операторов, choise == '1', значит, оператор if...
READ ALSO
ObservableList для чего

ObservableList для чего

Поясните пожалуйста что из себя представляет в JavaFx список ObservableList и для чего он используется? Можно ли вместо обычных ArrayList использовать...

264
Почему дата высчитывается некорректно?

Почему дата высчитывается некорректно?

Я хочу получить дату отличающуюся на 10 дней от текущейПолучаю текущую дату с помощью

155
Hibernate запрос из базы данных с помощью Criteria

Hibernate запрос из базы данных с помощью Criteria

Есть 3 таблицы в базе данных MySqlВот их классы

169