Java .hasNextInt()不匹配异常

时间:2013-01-24 20:27:32

标签: java

我有一个格式如下的.txt文件

The Shawshank Redemption 
100 
19.95 
DVD 

还有更多行,但我正在尝试将这些值存储到四个不同的ArrayLists中。问题是获取错误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(),它会读取它。任何人都可以给我的任何提示都会非常有帮助。

1 个答案:

答案 0 :(得分:2)

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

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

然后当你第一次再次调用nextLine时,你实际上正在使用list.nextLine读取整数(100),这就是你得到该异常的原因。因为您现在可能正在String中存储Integer List。只需从while删除第二个测试。

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

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


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