Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java,使用scanner,异常_Java_Exception - Fatal编程技术网

Java,使用scanner,异常

Java,使用scanner,异常,java,exception,Java,Exception,有人能告诉我我做错了什么吗,这部分代码应该扫描餐厅名称、菜单名称、菜单项名称及其价格,但它给了我某种例外,而且它似乎完全跳过了第一次扫描,只是跳到了第二次,理想情况下,它应该扫描1家餐厅,其中有1个菜单,包含2个菜单项及其名称和价格 String newRestaurant, newMenu; String[] newMenuItem = { "", "" }; double[] price = {0.0, 0.0}; int x = 0; System.out

有人能告诉我我做错了什么吗,这部分代码应该扫描餐厅名称、菜单名称、菜单项名称及其价格,但它给了我某种例外,而且它似乎完全跳过了第一次扫描,只是跳到了第二次,理想情况下,它应该扫描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、 等于(s2)

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

参考:


现在我们遇到了导致抛出
inputmaschException
的问题。您已经告诉我们它来自一个简单的
println
,但这实际上是不可能的。实际上,stacktrace表示异常是由
nextDouble()
调用引发的,这将发生,因为(如所述)“…下一个标记与浮点正则表达式不匹配,或者超出范围”

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

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

    一个正确编写的程序应该处理这个。。。告诉用户他/她犯了错误。(例如,使用
    hasDouble()
    方法测试下一个令牌是否可接受为
    double

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


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

。您如何声明“扫描”?另外,会发生什么异常?请确保在调用
nextLine()
之前,您没有调用
nextyy()。更多信息或。确切的异常是什么?异常是:线程“main”java.util.InputMismatchException中的异常位于java.util。位于java.util的Scanner.throwFor(Scanner.java:909)。位于java.util的Scanner.next(Scanner.java:1530)。restaurantsett2.main(restaurantsett2.java:78)上的Scanner.nextDouble(Scanner.java:2456)