0

ユーザーからの入力を文字の形で受け入れようとしています。私はそれを機能させていますが、それが6文字(H、h、S、s、L、l)のいずれかであることを確認する必要があります。whileループがありますが、複数の文字ステートメントを追加するとすぐに、正しいはずのすべての値に対してエラーが発生します。

関数は次のとおりです。

    private static char getHighLow(Scanner keyboard) 
{
    System.out.println("High, Low, or Sevens (H/L/S): ");
    String choiceString = keyboard.next();

    char choice = choiceString.charAt(0);

    while (choice != 'H' || choice != 'h' || choice != 'L' || choice != 'l' || choice != 'S' || choice != 's')
    {
        System.out.println("You have entered an invalid entry.");
        System.out.println("High, Low, or Sevens (H/L/S): ");
        choiceString = keyboard.next();
    }

    return choice;

}

このような複数の文字をチェックし続けるための最良の方法は何ですか?

4

3 に答える 3

4

&&の代わりに使用してください||

while (choice != 'H' && choice != 'h' && choice != 'L' && choice != 'l' && choice != 'S' && choice != 's')

これは、最初に小文字に変換することで簡略化できます。

choice = Character.toLowerCase(choice);

while (choice != 'h' && choice != 'l' && choice != 's')
于 2012-10-15T15:05:26.873 に答える
3

ロジックにエラーがあります。これらのテストをANDで接続する必要があります&&::

while (choice != 'H' && choice != 'h' && choice != 'L' && ...

さらにchoice、ループの本体内で更新されることはないため、変更されることはありません。ループ内でchoice = choiceString.charAt(0);再読み取りした後、を複製します。choiceString

概念的には、文字がHでなく、Lでなく、Sでない限り、入力を求め続ける必要があります。

于 2012-10-15T15:05:44.747 に答える
2

ループ内で更新することはありませんchoicewhile

ループの最後に次の行を追加するだけです。

choice = choiceString.charAt(0);

さらに、&&ではなくで確認する必要があり||ます。

于 2012-10-15T15:05:49.270 に答える