输入切换语句选择的字符

时间:2018-04-16 13:59:19

标签: java char switch-statement

这个问题与switch语句有关。这是一些类似的帖子(如下),但我仍然无法理解。

Using user-inputted characters in If/Switch statements

How do I used a char as the case in a switch-case?

Multiple characters in a switch statement?

请考虑以下事项:

public class main
{
    public int selection; 

    public main()
    {
        System.out.println("MENU");
        Scanner in = new Scanner(System.in);
        do {
            showMenu();
            selection = in.nextInt();
            switch (selection)
            {
                case 1:
                    doSomething();
                break;              
                case 2:
                case 3: 

                default: 
                    System.out.println("Instruction is invalid");
            }
        } 
        while (selection !=7);
        { System.exit(0); }
}

public static void showMenu() 
    {
        System.out.print('\u000c');
        System.out.println("option 1 \n");
        System.out.println("option 2 \n");            
        System.out.println("7 - exit.\n");
        System.out.println("Select Option:\n");
    }
}

所以这是一个switch语句,供用户在do while循环中选择选项。用户从打印列表中输入一个整数来选择一个选项,在完成大小写后,它会循环回到菜单。

我的老师告诉我,更好的做法是使用char而不是int来获取交换机的用户输入。我希望它看起来像这样,但它不起作用,我不知道为什么。

public class main
    {
    public int selection; 

    public main()
    {
        System.out.println("MENU");
        Scanner in = new Scanner(System.in);
        do {
            showMenu();
            String menu = "";
            char selection = menu.charAt();          
            switch (selection)
            {
                case 'A':
                doSomething();
                break;                
                case 2, 3, 4, 5, 6
                default: 
                System.out.println("Instruction is invalid");
            }
        } 
        while (selection != 'QQ');
        { System.exit(0); }
}

在发布的第二个链接中,有一个我认为建议使用的答案       hello.charAt(0) 作为转换条件?

  switch (hello.charAt(0)) 
      {
          case 'a': ... break;
      }

我对此代码有三个具体问题:

1)我的代码不起作用。我的情况应该是hello.charAt(0)吗?

2)我想在交换机上使用QQ作为退出选项。可以使用上面的代码吗?从第二个链接,我认为应该没问题。

3)此处还显示(switch statement using char in the case condition?)case语句应该有双引号。也有人可以澄清一下吗?

3 个答案:

答案 0 :(得分:1)

这样的事情会更好:

do {
    showMenu();
    String menu = in.nextLine(); // read a line of input
    char selection;
    if (menu.length>0) selection = menu.charAt(0); // extract the first char of the line read
    else selection = '\0'; // special char when input is empty...

    switch (selection) {
    case 'A': case 'a':
         doSomething();
         break;
    case 'Q': case 'q':
         break;
    default: 
         System.out.println("Instruction is invalid");
    }
} while (selection != 'Q' && selection != 'q');

menu存储完整的输入行。 selection将是该行的第一个字符(如果存在)。

答案 1 :(得分:0)

要使用.charAt(),你需要提供索引 - 所以如果你想使用第一个字符,那么使用0等。

答案 2 :(得分:0)

一般来说,读一行而不是一次击键:

String的第一个字符是charAt(0)获得的。但是字符串 可以有长度0.有if-expression CONDITION ? TRUEVALUE : FALSEVALUE

    String menu = in.readLine();
    char selection = menu.isEmpty() ? ' ' : menu.charAt(0);
    switch (selection) {
        case 'A':
            doSomething();
            break;
        case '2':
        case '3':
        case '4':
            ...
            break;
        default: 
            System.out.println("Instruction is invalid");
    }

还有更多的解决方案:

    String menuSelection = in.readLine();
    switch (menuSelection) {
        case "A":
            doSomething();
            break;
        case "2":
        case "3":
        case "4":
            ...
            break;
        default: 
            System.out.println("Instruction is invalid");
    }