这些是我想接受的所有命令。
Q H A D L <Color> <Drawer> M <Drawer1> <Drawer2>
我有这个开关盒。 错误检查输入的最佳方法是什么?哪里是扫描潜在的非单字母命令(如“L”或“M”命令)的最佳位置?我希望只有一个默认值代码中的大小写,以避免在多个位置复制粘贴错误消息。另外,我担心像Q zzzzz
这样的命令被接受,因为我只调用reader.next()
,直到下一个空格才读。我应该使用reader.nextline()
吗?
String input = reader.next();
switch (input.toUpperCase())
{
case "Q": //Quit:
//.....
break;
case "H": //Help:
//.....
break;
case "A": //About:
//.....
break;
case "D": //Draw:
//.....
break;
case "L": //Lay:
//prompt for more input here?
//if so, and the input is wrong, how to jump to default?
//.....
break;
case "M": //Move:
//same issue as 'L'
break;
default:
System.out.println("\nYour command was not recognized. Type H for help.");
}//end switch()
我原本以为在切换案例之前要扫描三次(如果用户选择单字母命令,其中2个可能为空)。
我可以编写解决方案,但这将是一个非常难看的解决方案。我只是一个初学者程序员,试图优雅地写出来。
答案 0 :(得分:1)
也许是这样的:
String input = reader.nextLine();
char c = input.charAt(0);
if ( (c != 'M' && c != 'L') && input.length() > 1)
// throw some error message
switch(c)
...
case "L": //Lay:
// parse the rest of input here
break;
答案 1 :(得分:1)
假设我们输入命令L red hi(出于某种原因,如果我把文本放在&lt;&gt;中它就会消失,即使用引号&#34;&#34;)
您可以在默认情况下使用类似的内容:
input.matches("^[L-M] <\\w*> <\\w*>$")
这将检查正确的格式。然后您可以继续查看:
input.substring(3, 6).equals("Red")
最后:
input.substring(9, 11).equals("Hi")
请注意,substring命令中的第一个数字是命令的第一个字母(在&#39;&lt;&#39;之后),第二个数字是结束&#39;&gt;&#39; 。 &#39; L&#39;是0,制作&#39; R&#39; 3,第一个&#39;&#39; 6。
这种情况的完整代码如下:
public static void main(String[] args) {
Scanner reader = new Scanner(System.in);
System.out.print("Enter the letter: ");
String input = reader.nextLine();
switch (input.toUpperCase())
{
case "Q": //Quit:
//.....
break;
case "H": //Help:
//.....
break;
case "A": //About:
//.....
break;
case "D": //Draw:
//.....
break;
default:
if(input.matches("^L <\\w*> <\\w*>$")){
// Use the below if-else statements for all L <text> commands
if (input.substring(3, 6).equals("Red")){
if (input.substring(9, 11).equals("Hi")){
// Do stuff
/* Note: the first number is counting from 0 to the first letter
* of the sub-command (H) in the following:
* L <Red> <Hi>
* It comes out as 9
* The second number (11) is the closing sign thing (>)
* You will need to modify these according to your commands
*/
}
// Use else-if statements for different secondary commands
else
System.out.println("\nYour command was not recognized. Type H for help.");
// You can replace this error message with a boolean value, or a method
// To avoid the message appearing in the code more than once.
}
// Use else-if statements for different commands
else // Final else command
System.out.println("\nYour command was not recognized. Type H for help.");
}
// After the different commands, the next else-if is to check for
// M <Stuff> <Stuff>
}//end switch()
}
希望这有帮助!