BufferedReader readLine () не работает во время цикла - PullRequest
0 голосов
/ 10 сентября 2018

Когда я вызываю readLine () внутри блока while, каким-то образом, даже когда я нажимаю enter, ввод не завершится. Похоже, он создает новую строку, но все еще ожидает завершения ввода строки.

public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);

String line = "";
while(!line.equals("End")){
    line = br.readLine();
    System.out.println("String from keyboard not working : "+line+"\n");
}
while((line = br.readLine())!=null) {
    System.out.println("String from keyboard in while loop : "+line+"\n");
}
}

Когда я помещаю readline () поверх секции условий while, она работает нормально. Я хочу знать, почему первое время не работает.

Ответы [ 3 ]

0 голосов
/ 10 сентября 2018
while(!line.equals("End")){
    line = br.readLine();
    System.out.println("String from keyboard not working : "+line+"\n");
}

Этот блок работает нормально. При этом, как только вы введете End, он будет один раз завершен и завершится. Причиной печати является то, что условие проверяется в следующем цикле цикла.

while((line = br.readLine())!=null) {
    System.out.println("String from keyboard in while loop : "+line+"\n")
}

Этот блок не заканчивается, потому что каждый раз, когда вы нажимаете Enter, терминал отправляет пустую строку. Поэтому, если вы хотите, чтобы он завершался при нажатии Enter, измените условие на

while(!(line = br.readLine()).equals(""))
0 голосов
/ 10 сентября 2018

Не совсем уверен, с какими проблемами вы думаете

Но если я запускаю ваш код на входе

test
String from keyboard not working : test

End
String from keyboard not working : End

kkk
String from keyboard in while loop : kkk

Тогда, если я введу ctrl-d, второй цикл завершится

, даже когда я нажал ввод, enter не завершает ввод, попробуйте ctrl-d

0 голосов
/ 10 сентября 2018

Вы вызвали переменную line , прежде чем помещать какие-либо данные из bufferedReader. первый цикл while сравнивает «END» с «», поэтому, очевидно, неправильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...