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

可以测试以确保输入的长度为 1:

again.length() == 1

更好的方法可能是:

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

甚至

while (! again.matches("[nyNY]")) {
    ...
}
于 2012-10-08T21:48:51.127 回答
3

假设again是一个包含完整用户输入的字符串,您可以使用:

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

仅当整个字符串匹配时,该.equals()方法才会匹配。

于 2012-10-08T21:49:52.080 回答
1

其中一种方法是:

首先检查again字符串length是否只有一个字符。如果没有,请再次询问。

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 回答
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 回答
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 回答