Aquí, en este programa, quiero ingresar cadenas infinitamente desde el teclado hasta que el usuario escriba "0". He intentado muchas combinaciones diferentes de next () y nextLine () pero el programa muestra una lista vacía o no recibe la cadena.

He cambiado la posición de la "condición if" de abajo hacia arriba dentro del ciclo para siempre. Al principio, ni siquiera se salió del bucle.

A continuación se muestra mi código:

    List<String> keyWords = new ArrayList<String>();
    System.out.println("Input the keywords: (type 0 if you want to stop)\n");
    Scanner scanKeyWords = new Scanner(System.in);
    for(;;) {
        if(scanKeyWords.next().equals("0")) break;
        else
        keyWords.add(scanKeyWords.nextLine());
        System.out.println("done");
    }
    System.out.println(keyWords.toString());
    System.out.println(keyWords.isEmpty());

Por ejemplo, cuando ingreso "Amor" "odio" "0" el código devuelve [,,] ???

He comprobado que no está vacío en absoluto con isEmpty?

Solo soy un principiante en Java. Actualmente estoy tratando de mejorar mis habilidades trabajando en este proyecto que está relacionado con palabras clave.

¿Podrías ayudarme con esto? ¡Muchas gracias!

1
Sean William 16 oct. 2019 a las 18:41

1 respuesta

La mejor respuesta

Creo que se debe a que ha consumido la entrada en la condición if, por lo que dentro del bloque else, no regresará nada de nextLine().

Esta es una versión funcional:

import java.util.*;

class Test {
    public static void main(String[] args) {
        List<String> keyWords = new ArrayList<>();
        Scanner scanKeyWords = new Scanner(System.in);
        for(;;) {
            String next = scanKeyWords.next();
            if("0".equals(next)) {
                break;
            }
            // if you put keyWords.add(scankeyWords.nextLine()) here, it will not work.
            keyWords.add(next);
        }
        System.out.println(keyWords.toString());
    }
}
3
Surely 16 oct. 2019 a las 15:50