Страницы

Поиск по вопросам

понедельник, 9 декабря 2019 г.

Цикл for делает лишний проход если итерировать до System.in.read

#java


Пример из книги:

import java.io.IOException;

public class Test {
    public static void main(String[] args) throws IOException {
        int i;
        System.out.println("15 см");

        for(i = 1; (char) System.in.read() !='S'; i++){
            System.out.println("Проход " + i);
        }
    }
}


Помогите разобрать этот код. Я продебажил посмотрел как отрабатывает, но не понял
почему после введённого числа выдает 2 раза "Проход" + i

При вводе символа: s, выдает  в консоли: Проход 1, Проход 2, почему 2 то?
    


Ответы

Ответ 1



Если вкратце, то если вы введёте в консоль какой-то символ и нажмёте Enter, то будет считано два значения: сам символ и символ перевода строки (\n) В этом можно убедиться, посмотрев что возвращает System.in.read() на каждой итерации цикла: char ch; for (i = 1; (ch = (char)System.in.read()) != 'S'; i++) { System.out.println("Char code: " + (int)ch); System.out.println("Проход " + i); } При вводе a результат будет таким: Char code: 97 Проход 1 Char code: 10 Проход 2

Комментариев нет:

Отправить комментарий