Java,使用扫描程序,exception

有人能告诉我我做错了什么,这部分代码应该扫描餐馆的名称,菜单名称和菜单项的名称及其价格,但它给了我一些例外,它似乎完全跳过了第一个扫描,只需跳到第二个,理想情况下它应扫描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++; 

首先让我们解决你的字符串测试问题:

不要==!=来测试Java中的字符串。 除非你真的,真的知道你在做什么,否则==!=都有可能给你错误的答案。 使用s.equals(s2)!s.equals(s2)

您的原始代码使用==!=来比较字符串,这是测试不可靠的情况。 修复所有这些……

参考:

  • 如何比较Java中的字符串?

现在我们InputMismatchException了导致抛出InputMismatchException的问题。 你告诉我们它来自一个简单的println ,但这几乎是不可能的。 实际上,stacktrace表示nextDouble()调用抛出了exception,并且会发生这种情况,因为(如javadoc所说) “……下一个标记与Float正则表达式不匹配,或者超出范围“

原因是什么? 那可能是两件事:

  • 可能是用户输入的内容不是正确语法中的数字。 例如,“四”或“我的大脑受伤”。

    正确编写的程序应该通过告诉用户他/她犯了错误来解决这个问题。 (例如,使用hasDouble()方法测试下一个标记是否可以作为double 。)

  • 可能是代码中的逻辑错误意味着您试图将某个其他问题(或某事)的答案读作数字。

我不能告诉你哪一个是真正的原因,因为坦率地说,我不相信你所提供的“证据”。 我怀疑这是真正的代码,它肯定与堆栈跟踪不匹配。 此外,您还没有告诉我们“用户”正在键入什么来导致这种情况发生。