Что делает это условие (BufferredReader и InputStreamReader)?
В данный момент я читаю код и нашел метод, начинающийся так:
BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));
String userInput;
while ((userInput = stdIn.readLine()) != null) {
}
Может ли кто-нибудь объяснить мне это условие ? Что А = Б != с мне кажется странным.
4 ответа:
Кажется, что ваши глаза смотрят на пару скобок:
Я попытался сделать это более ясным выше.while ( (userInput = stdIn.readLine() ) != null) { }
Переменная
userInput
присваиваетсяstdIn.readLine()
. И хотяuserInput
не является нулем после этого назначения, цикл продолжается.Это всего лишь один лайнер для обработки обновления
userInput
, а также проверкиnull
Присваивание в скобках
Таким образом, пока в пользовательском вводе есть строки, условие(userInput = stdIn.readLine())
делает сразу две вещи: он присваивает строку переменной userInputи оценивает себя до этого значения. Но если ничего не было прочитано, тоreadLine()
возвращаетnull
, а целое выражение вычисляется какnull
.(userInput = stdIn.readLine() ) != null
выполняется, и циклwhile
продолжается. Когда в пользовательском вводе больше нет строк, условие ложно, и циклwhile
останавливается.
=
является оператором присваивания, а не оператором сравнения.
(a = b) != c
присваиваетb
Значениеa
, а затем сравнивает его сc
.В случае
while ((userInput = stdIn.readLine()) != null) { ... }
stdIn.readLine()
получает значение, которое затем сохраняется какuserInput
, и это значение проверяется, чтобы убедиться, что оно неnull
для выполнения цикла while. Это приводит к циклу чтения каждой строки файла, пока он не закончится строк для чтения.
Это что-то вроде:
Здесь мы присваиваем a с шагомint a = 0; int b = 0; while ((a = b++) != 10) { System.out.println(a); };
b
и проверяем, равно ли его значение 10 или нет.Таким же образом,
userInput = stdIn.readLine()
означает, что мы читаем строку, присваиваем ее переменнойuserInput
и проверяем, пока она не прочитаетnull
.