web-dev-qa-db-fra.com

Validation de l'entrée du scanner dans la boucle while

Je dois montrer les entrées du scanner dans une boucle while : l'utilisateur doit insérer des entrées jusqu'à ce qu'il écrive "quit". Donc, je dois valider chaque entrée pour vérifier s'il écrit "quit". Comment puis je faire ça?

while (!scanner.nextLine().equals("quit")) {
    System.out.println("Insert question code:");
    String question = scanner.nextLine();
    System.out.println("Insert answer code:");
    String answer = scanner.nextLine();

    service.storeResults(question, answer); // This stores given inputs on db
}

Ça ne marche pas. Comment puis-je valider chaque entrée d'utilisateur?

9
Kurt Bourbaki

Le problème est que nextLine () "fait avancer ce scanner au-delà de la ligne actuelle". Ainsi, lorsque vous appelez nextLine() dans la condition while et que vous n'enregistrez pas la valeur de retour, vous avez perdu cette ligne de l'entrée de l'utilisateur. L'appel à nextLine() sur la ligne 3 renvoie une ligne différente.

Vous pouvez essayer quelque chose comme ça

    Scanner scanner=new Scanner(System.in);
    while (true) {
        System.out.println("Insert question code:");
        String question = scanner.nextLine();
        if(question.equals("quit")){
            break;
        }
        System.out.println("Insert answer code:");
        String answer = scanner.nextLine();
        if(answer.equals("quit")){
            break;
        }
        service.storeResults(question, answer);
    }
10

Essayer:

while (scanner.hasNextLine()) {
    System.out.println("Insert question code:");
    String question = scanner.nextLine();
    if(question.equals("quit")){
     break;
    }

    System.out.println("Insert answer code:");
    String answer = scanner.nextLine();

    service.storeResults(question, answer); // This stores given inputs on db
}
2
user2986555

toujours vérifier si scanner.nextLine n'est pas "quitter"

while (!scanner.nextLine().equals("quit")) {
    System.out.println("Insert question code:");
    String question = scanner.nextLine();
    if(question.equals("quit"))
     break;

    System.out.println("Insert answer code:");
    String answer = scanner.nextLine();
    if(answer.equals("quit"))
      break;

    service.storeResults(question, answer); // This stores given inputs on db 

}

0
mosaad