使用带有 Switch 语句的字符串? [复制]

Posted

技术标签:

【中文标题】使用带有 Switch 语句的字符串? [复制]【英文标题】:Using String with Switch statements? [duplicate] 【发布时间】:2012-10-24 21:17:33 【问题描述】:

可能重复:Switch Statement with Strings in Java

好的,基本上我想知道这是否可行以及如何去做。我有一个菜单,我希望这个 switch 语句能够识别用户输入的字符或字符串。

我正在编写一个小菜单程序:

import java.util.*;
import java.io.*;
import java.io.File;
import java.io.FileReader;

public class Personnel

    // Instance Variables
    private static String empName;
    private static double wage;

    public static void main(String[] args) throws Exception
    

        clearScreen();
        question();
        printMenu();
        exit();
    

    public static void clearScreen()
    
        System.out.println("\u001b[H\u001b[2J");
    

    private static void exit()
    
        System.exit(0);
    

    private static void printMenu()
    
        System.out.println("\t------------------------------------");
        System.out.println("\t|Commands: n - New employee        |");
        System.out.println("\t|          c - Compute paychecks   |");
        System.out.println("\t|          r - Raise wages         |");
        System.out.println("\t|          p - Print records       |");
        System.out.println("\t|          d - Download data       |");
        System.out.println("\t|          u - Upload data         |");
        System.out.println("\t|          q - Quit                |");
        System.out.println("\t------------------------------------");
        System.out.println("");
    

    private static void question()
    
        System.out.println("Enter command: ");
        Scanner q = new Scanner(System.in);
        // String input = q.nextLine();

        switch (q.nextLine())
        
        case "n":
            System.out.println("Enter the name of new employee: ");
            Scanner stdin = new Scanner(System.in);
            System.out.println("Hourly (h) or salaried (s): ");
            Scanner stdin2 = new Scanner(System.in);
            if (stdin2.equals("h"))
            
                System.out.println("Enter hourly wage: ");
                Scanner stdin3 = new Scanner(System.in);
            
            else
            
                System.out.println("Enter annual salary: ");
                Scanner stdin4 = new Scanner(System.in);
            
            break;

        /*
         * case 9:
         *      System.out.println ("Please proceed."); 
         *      new InputMenu(); 
         *      break; 
         * default: 
         *      System.err.println ("Unrecognized option" ); break;
         */
        
    

我想做的是让这个菜单工作,这样你就可以输入一个命令,然后我会根据输入的命令编写运行方法。switch语句是最好的方法吗?在他们输入信息后,我需要它“中断”回到主菜单。在整个程序期间的任何时候,如果他们输入 q 则程序退出。我不确定执行此操作的最佳方法。

谢谢!

【问题讨论】:

这里回答了问题:***.com/questions/338206/… 【参考方案1】:

jdk 7 支持在 switch-case 语句中使用字符串。示​​例请参考此链接:http://docs.oracle.com/javase/7/docs/technotes/guides/language/strings-switch.html 希望这会有所帮助。

【讨论】:

【参考方案2】:

Switch 语句是执行此操作的最简洁的方法之一,尽管我不会争论它是否是“最好的”,因为它是主观的。但我来自 C/C++ 背景,对于其他在编写 Java 之前主要编写 C 和 C++ 的人来说,switch 语句是处理多个案例的自然方式。它只是更具可读性。在 C 领域的某一时刻,假设条件测试器可能是最快的条件测试器,因为它使用基于 O(1) 的算法来查找匹配情况,或者匹配默认情况(如果存在)。

但我不太确定 JVM/javac 是否是这种情况,因为我从未专门对其进行性能测试。但总而言之,它在语法上是最自然和可读的。

【讨论】:

什么时候可以在 C 或 C++ 中使用字符串 switch 我说的是switch语句,不是用字符串切换@paddy 我什么时候提到过 C/C++ 可以用字符串切换? 我的错... 这暗示了这是在回答有关在switch 中使用字符串的问题,而您说switch 是最干净的方式。 那是我退缩的地方,我说我不会争论这是否是“最好”的方式,因为对我来说最好的方式对你来说不是最好的方式@paddy

以上是关于使用带有 Switch 语句的字符串? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

我们可以在c中使用带有字符串的switch-case语句吗? [重复]

为啥在 if 语句中初始化字符串似乎与在 switch 语句中不同? [复制]

使用带有 AVQueuePlayer 的 Switch 语句?

我可以使用带有两个变量的 case/switch 语句吗?

在 Switch 语句/Matlab 中比较字符串

我可以使用带有两个变量的case / switch语句吗?