有人可以告诉我我做错了什么,这部分代码应该扫描餐馆名称,菜单名称和菜单项名称及其价格,但它给了我某种例外,它似乎完全跳过第一次扫描,只跳到第二次,理想情况下它应扫描1个包含1个菜单的餐厅,其中包含2个菜单项及其名称和价格
String newRestaurant, newMenu;
String[] newMenuItem = { "", "" };
double[] price = {0.0, 0.0};
int x = 0;
System.out.println("---------------------------------------");
System.out.println("CREATE A RESTAURANT, MENUS, and MENU ITEMS:");
System.out.println("Please input the name of the new Restaurant:");
newRestaurant = scan.nextLine();
System.out.println("What is the name of the Menu you wish to create (type 'none', if you are done):");
newMenu = scan.nextLine();
if (newMenu == "none") System.out.println("Saving entry...");
else {
System.out.println("What is the name of the Menu item you wish to create (type 'none', if you are done):");
newMenuItem[x] = scan.nextLine();
if(newMenu != "none") {
System.out.println("What is the price?");
price[x]= scan.nextDouble();
x++;
答案 0 :(得分:0)
首先让我们解决你的字符串测试问题:
不要
==
或!=
在Java中测试字符串。除非你真的,真的知道你在做什么,==
和!=
都有可能给你错误的答案。使用s.equals(s2)
或!s.equals(s2)
。
您的原始代码使用==
和!=
来比较字符串,这是测试 不可靠的情况。修复所有这些......
参考:
现在我们遇到了导致InputMismatchException
被抛出的问题。你告诉我们它来自一个简单的println
,但这几乎是不可能的。实际上,堆栈跟踪表示nextDouble()
调用会引发异常,并且会发生这种情况,因为(正如javadoc所说的那样)" ...下一个令牌会与Float正则表达式不匹配,或者超出范围" 。
原因是什么?那可能是两件事:
可能是用户输入的内容不是正确语法中的数字。例如,"四"或者"我的大脑疼痛"。
正确编写的程序应该通过告诉用户他/她犯了错误来解决这个问题。 (例如,使用hasDouble()
方法测试下一个标记是否可以作为double
接受。)
可能是您的代码中的逻辑错误意味着您试图将某个其他问题(或某事)的答案读作数字。
我无法告诉你哪些是真正的原因,因为坦率地说,我不相信这些证据"你提供的。我怀疑那是真正的代码,它肯定与堆栈跟踪不匹配。此外,您还没有告诉我们"用户"正在打字导致这种情况发生。