我正在尝试获得“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”开头的单词时重新提示用户。
谢谢!
答案 0 :(得分:3)
您可以进行测试,以确保输入的长度为1:
again.length() == 1
但更好的方法可能是:
while (! (again.equalsIgnoreCase("n") || again.equalsIgnoreCase("y"))) {
...
}
甚至
while (! again.matches("[nyNY]")) {
...
}
答案 1 :(得分:3)
假设again
是包含完整用户输入的字符串,您可以使用:
while (!again.equals("N") && !again.equals("n") ...
仅当整个字符串匹配时,.equals()
方法才会匹配。
答案 2 :(得分: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();
}
答案 3 :(得分: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();
}
这样,如果需要,您也可以稍后轻松添加是/否等。
答案 4 :(得分: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;