Java,使用扫描程序,异常

时间:2014-06-09 00:04:06

标签: 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++;

1 个答案:

答案 0 :(得分:0)

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

  

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

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

参考:


现在我们遇到了导致InputMismatchException被抛出的问题。你告诉我们它来自一个简单的println,但这几乎是不可能的。实际上,堆栈跟踪表示nextDouble()调用会引发异常,并且会发生这种情况,因为(正如javadoc所说的那样)" ...下一个令牌会与Float正则表达式不匹配,或者超出范围"

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

  • 可能是用户输入的内容不是正确语法中的数字。例如,"四"或者"我的大脑疼痛"。

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

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

我无法告诉你哪些是真正的原因,因为坦率地说,我不相信这些证据"你提供的。我怀疑那是真正的代码,它肯定与堆栈跟踪不匹配。此外,您还没有告诉我们"用户"正在打字导致这种情况发生。