web-dev-qa-db-ja.com

whileループでのスキャナー入力の検証

whileループでスキャナー入力を表示する必要があります。ユーザーは「quit」と書き込むまで入力を挿入する必要があります。したがって、私は各入力を検証して、彼が「終了」と書いているかどうかを確認する必要があります。どうやってやるの?

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
}

これは機能しません。各ユーザー入力を検証するにはどうすればよいですか?

9
Kurt Bourbaki

問題は、 nextLine() "このスキャナーを現在の行を超えて進める"ということです。したがって、while条件でnextLine()を呼び出し、戻り値を保存しないと、ユーザーの入力のその行が失われます。 3行目のnextLine()を呼び出すと、別の行が返されます。

あなたはこのようなことを試すことができます

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

試してください:

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

scanner.nextLineが「終了」していないかどうかを常に確認する

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