2013-01-24 25 views
0

我有如下的Java .hasNextInt()不匹配异常

The Shawshank Redemption 
100 
19.95 
DVD 

还有更多的线被格式化为.txt文件,但我试图将这些值存储到四个不同的ArrayList。问题是获取错误java.util.InputMismatchException。这里是我的代码:

while(list.hasNext() && !list.nextLine().equals("")){ 
       titleList.add(list.nextLine()); 
       quantityList.add(list.nextInt());  
       priceList.add(list.nextDouble()); 
       typeList.add(list.nextLine());   
      } 

该程序崩溃在quantityList.add(list.nextInt());告诉我下一行不是int,给我那个错误。它会阅读它,虽然如果我使用nextLine()。任何人可以给我的提示将非常有帮助。

+3

自己做一些调试!从列表中找出哪个电影/您的程序卡在哪个文件的哪一行。 – us2012

+0

你为什么把这些放在四个单独的列表中?有一个对象来代表每部电影不是更好吗? –

+0

我做了很多。它被卡在'100'上,它不会把它看作整数。我真的无法弄清楚我一直在寻找解决方案一个小时左右的问题。 – user2008914

回答

2

您已经阅读了第一行中的while语句: -

while(list.hasNext() && !list.nextLine().equals("")) 

然后当你再次调用nextLine第一次,你实际上是在阅读整数(100),使用list.nextLine,这就是为什么你会得到这个例外。因为您现在可能将String存储在Integer List中。只需从while中删除第二个测试。

第二个问题是,您只检查list.hasNext()一次,然后您正在阅读4 inputs。如果你退出输入,这可能再次引发你的异常。所以,你也需要照顾这一点。

另一个问题,你会得到是由于使用list.nextInt()list.nextDouble()。请记住,这些方法读取输入直到最后的newline字符。因此,读取后留下的换行符将被下面的method读取输入调用读取,如果没有被使用。因此,在这两种方法之后,您还需要添加一个空的list.next(),以消耗newline,这样newline不会被list.nextDouble()读取,在list.nextInt()之后使用,否则您将继续得到异常。


除了这些问题,我建议你创建一个Class存储这些属性,而具有该类的对象的List,而不是4名不同的列表。

+0

对不起,我确信有更高效的方法来做到这一点,不幸的是我只限于我的老师设置的这个项目的边界。他们希望这样做。该列表大约有40行,基本上都重复了这种格式。删除第一个下一行时,我仍然遇到错误。该程序只是不相信100是一个整数,我不知道如何解决它。它告诉我它的读数为100. – user2008914

+0

调试告诉我它将Shawshank Redemption – user2008914

+0

@ user2008914正确存储第一行。读完'list.nextInt()'后,将一个空的调用添加到'list.next()'中,以阅读'nextInt()'遗留的换行符。扫描器#nextInt'不会在最后读取换行符。 –