Что делает это условие (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.