我无法理解如何使用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”后,它会打印“无效选项”。
答案 0 :(得分:7)
答案 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,我们无法帮助您理解。