Java switch case单一和非单一命令输入

时间:2016-01-23 22:11:30

标签: java

这些是我想接受的所有命令。

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个可能为空)。

我可以编写解决方案,但这将是一个非常难看的解决方案。我只是一个初学者程序员,试图优雅地写出来。

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()

}

希望这有帮助!