1

「y」、「Y」、「n」、または「N」の有効な入力を取得しようとしています。

入力が有効でない場合(たとえば、「y」または「n」で始まる単語)、ユーザーに入力を再度求めるプロンプトを表示します。

これまでのところ:

while  (again.charAt(0) != 'N' && again.charAt(0) != 'n' && again.charAt(0) !='Y' && again.charAt(0) != 'y' ) {
    System.out.println ("Invalid Inpur! Enter Y/N");
    again = numscan.next();
}

if (again.charAt(0)== 'N' || again.charAt(0) == 'n') {
    active = false;                   
} else {
    if (again.charAt(0)== 'Y' || again.charAt(0) == 'y'){
        active = true;
        random = (int) (Math.random () *(11));
    }
}

私が抱えている問題は、文字「y」または「n」で始まる単語を入力すると、それが有効な入力として検出されることです(スロット0の文字であるため)。「y」または「n」で始まる単語を入力したときにユーザーに再度プロンプトを表示できるように、これを修正するためのサポートが必要です。

ありがとう!

4

5 に答える 5

3

完全なユーザー入力を含む文字列であると仮定するagainと、次を使用できます。

while (!again.equals("N") && !again.equals("n") ...

この.equals()メソッドは、文字列全体が一致する場合にのみ一致します。

于 2012-10-08T21:49:52.080 に答える
3

入力の長さが 1 であることを確認するためにテストできます。

again.length() == 1

しかし、より良いアプローチは次のとおりです。

while (! (again.equalsIgnoreCase("n") || again.equalsIgnoreCase("y"))) {
    ...
}

あるいは

while (! again.matches("[nyNY]")) {
    ...
}
于 2012-10-08T21:48:51.127 に答える
1

それはあなたが望むもののように聞こえます:

while  (!again.equals("N") && !again.equals("n") && !again.equals("Y") && !again.equals("y") ) {
    System.out.println ("Invalid Inpur! Enter Y/N");
    again = numscan.next();
}

このようにして、必要に応じて、後で[はい]/[いいえ]などを簡単に追加することもできます。

于 2012-10-08T21:49:47.180 に答える
1

方法の1つは次のとおりです。

最初のチェックagain文字列lengthは 1 文字のみです。そうでない場合は、再度質問してください。

if(again.length() ==1)
{
 while  (again.charAt(0) != 'N' && again.charAt(0) != 'n' && again.charAt(0) !='Y' && again.charAt(0) != 'y' ) {
               System.out.println ("Invalid Inpur! Enter Y/N");
                again = numscan.next();
            }
.....

}else
     {
System.out.println ("Invalid Inpur! Enter Y/N");
                    again = numscan.next();
    }
于 2012-10-08T21:48:47.367 に答える
0

正規表現は、厳密な入力チェックの代替手段になる可能性があります。次のコードは、大文字と小文字を区別せずに y または n を検証します。

while (!again.matches("(?i)^[yn]$")){
    System.out.println ("Invalid Inpur! Enter Y/N");
    again = numscan.next();
}
active = (again.equalsIgnoreCase("Y"))? true : false;
于 2012-10-08T22:09:56.563 に答える