Cuando llamo a readLine () dentro del bloque del bucle while, de alguna manera, incluso cuando presioné enter, la entrada no terminará. Parece que crea una nueva línea pero aún espera que la entrada de línea termine.

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");
}
}

Cuando pongo readline () encima de la sección de condición while, funciona bien. Quiero saber por qué lo primero no funciona.

0
theorist17 10 sep. 2018 a las 06:50

3 respuestas

La mejor respuesta

No estoy muy segura de qué problema crees que estás teniendo

Pero si ejecuto tu código en la entrada

test
String from keyboard not working : test

End
String from keyboard not working : End

kkk
String from keyboard in while loop : kkk

Luego, si ingreso ctrl-d, el segundo ciclo terminará

incluso cuando presioné enter, enter no finaliza la entrada, intente ctrl-d

2
Scary Wombat 10 sep. 2018 a las 04:29
while(!line.equals("End")){
    line = br.readLine();
    System.out.println("String from keyboard not working : "+line+"\n");
}

Este bloque funciona bien. En este una vez que ingrese End se imprimirá Finalizar una vez y finalizará. El motivo de la impresión es que la condición se verifica en el siguiente ciclo del ciclo.

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

Este bloque no termina porque cada vez que presionas Enter, el terminal envía una cadena vacía. Entonces, si desea que finalice cuando presiona Enter, cambie la condición a

while(!(line = br.readLine()).equals(""))
1
Missaka Iddamalgoda 10 sep. 2018 a las 04:22

Primero llamó a la variable línea antes de colocar los datos del bufferedReader. el primer bucle while compara "END" con "", por lo que, obviamente, está mal.

0
Leandro Keen Zapa 10 sep. 2018 a las 03:58