我正在为扫雷的基本非递归、非 GUI 形式做一个编码项目。要求之一是输入命令必须严格格式化,如下所示:
对于标记命令(显示、猜测、标记): [“显示”/“r”] [int] [int]
寻求帮助并退出: 只是[“help”/“h”]或[“quit”/“q”]
任何超出这些限制的输入都必须被视为格式错误。我的显示代码如下所示:
case "reveal":
case "r":
roundsCompleted ++;
if(input.hasNextInt()){
par1 = input.nextInt();
}
else{
commandIn = null;
}
if(input.hasNextInt()){
par2 = input.nextInt();
correctInput = true;
}
else{
commandIn = null;
}
if(correctInput && isInBounds(par1, par2)){
reveal(par1, par2);
当然,这一切都在 switch 语句中。 commandIn = null 语句旨在抛出打印“命令无法识别”的默认情况。我意识到我的部分问题是它们位于两个单独的 if-else 语句中。另一个问题是,当第一个之后没有 int 时, input.hasNextInt() 似乎不会计算为 false 。
这个问题的本质是将这些命令完全限制为我上面列出的格式。谁能给我一些关于这个问题的见解?谢谢。
最佳答案
我会使用regex首先看看某件事是否是一个好的输入,或者只是因为它会更容易
String input = "r 3 4";
if (input.matches("^(help|h|quit|q|((r|reveal) \\d \\d))$"))
//switch case
System.out.println("match");
else
//null string
System.out.println("no match");
然后在你获得匹配后,你可以像你正在做的那样使用你的 switch case,如果它是“reveal”或“r”,我只会使用 split()并将其转为数组以获得不同的x和y坐标
关于java - 如何检查严格格式的输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28352859/