Java:如何使用switch语句

时间:2012-09-22 08:56:39

标签: java switch-statement string-comparison

  

可能重复:
  How do I compare strings in Java?

我无法理解如何使用Java switch语句。在其中一个case语句中执行一个方法之后,它仍然会转到default语句并运行它。这是代码:

Scanner scanner = new Scanner(System.in);
String option = null;

while (option != "5") {
    ShowMenu();
    option = scanner.nextLine();
    switch (option) {
        case "1": ViewAllProducts(); break;
        case "2": ViewProductDetails(scanner); break;
        case "3": DeleteProduct(scanner); break;
        case "4": AddProduct(scanner); break;
        case "5": break;
        default: System.out.println("Invalid option. Please try again."); break;
    }
}

以上代码是主要方法。例如,运行案例“4”后,它会打印“无效选项”。

5 个答案:

答案 0 :(得分:7)

  while (!option.equals("5")){...}

使用.equals()进行字符串比较。

==比较字符串引用(内存位置) .equals()比较字符串值

答案 1 :(得分:6)

您在while条件中将字符串与==进行比较(比较引用而不是值{ - 3}}),而循环应更改为以下内容 -

while (!option.equals("5"))

由于use equals method for value equality,它在C#中完美运行,而运算符重载为operator overloading(尽管“+”为字符串和数字重载)

答案 2 :(得分:1)

我认为问题出在while循环的情况下。 您可以将条件更改为while(!"5".equals(option)),然后尝试运行问题。

希望这会对你有所帮助。

答案 3 :(得分:1)

我正在修改您的代码,以便在阅读新选项之前重新初始化您的扫描仪参考。

    Scanner scanner = new Scanner(System.in);
    String option = null;

    ShowMenu();
    option = scanner.nextLine();

    while (!"5".equals(option)) {
        switch (option) {
            case "1": ViewAllProducts(); break;
            case "2": ViewProductDetails(scanner); break;
            case "3": DeleteProduct(scanner); break;
            case "4": AddProduct(scanner); break;
            case "5": break;
            default: System.out.println("Invalid option. Please try again..."); break;
        }
        ShowMenu();
        scanner = new Scanner(System.in);  // Add this here

        option = scanner.nextLine();    // Use brand new scanner without any problem..
    }

休息,您可以阅读我提供的链接,了解阅读用户输入的各种方法之间的区别..

答案 4 :(得分:0)

  

我停止将扫描仪传递给每个函数,并在每个函数内部创建一个新函数。这解决了问题。所以,我想出了那个问题..但是,我想知道为什么......

如果您发布了SSCE,我们可能会回答这个问题。不幸的是,您描述的行为涉及您尚未向我们展示的代码。

  

这是Java中的错误还是正常的错误?

极不可能这是一个Java错误。 Scanner代码已经在Java中使用了几年,之前可能遇到过任何重大错误并且已经修复过。

另一方面,我认为没有理由将Scanner传递给方法会使本身产生任何差异。

但最重要的是,如果没有SSCE,就无法弄清楚你的代码到底在做什么......并解释根本原因。

  

如果我能理解为什么这是一个问题,那么我将来可以避免使用其他类...除非这只发生在扫描仪上?

如果没有SSCE,我们无法帮助您理解。