Scanner,nextInt和InputMismatchException

时间:2011-05-06 09:38:57

标签: java file-io java.util.scanner

我正在尝试读取一个文本文件,然后使用Java中的nextInt()函数在循环中打印出整数。我的文本文件格式为:

a 2000 2
b 3000 1
c 4000 5
d 5000 6

这是我的代码:

public static void main(String[] args) throws FileNotFoundException {

  String fileSpecified = args[0] + ".txt";

  FileReader fr = new FileReader(fileSpecified);
  BufferedReader br = new BufferedReader (fr);
  Scanner in = new Scanner (br);

  while (in.hasNextLine()) {
    System.out.println ("next int = " + in.nextInt());
  }
}

我总是得到的错误是:

Exception in thread "main" java.util.InputMismatchException
           at java.util.Scanner.throwFor(Unknown Source)
           at java.util.Scanner.next(Unknown Source)
           at java.util.Scanner.nextInt(Unknown Source)
           at java.util.Scanner.nextInt(Unknown Source)

每次在任何程序中使用nextInt()时都会出现此错误。

3 个答案:

答案 0 :(得分:6)

我认为会找到人物,例如“a”,“b”,“c”是一个字符串,未能将其作为int。你可以通过调试来解决这个问题:

System.out.println ("next value= " + in.next());
//System.out.println ("next int = " + in.nextInt());

您也可以使用API​​保护来防止这种情况。

if(in.hasNextInt()) {
        System.out.println ("next int = " + in.nextInt());
}

答案 1 :(得分:2)

hasNextLine并不意味着下一个值是int。您发布的输入文件包含例如" a",这不是一个int。

答案 2 :(得分:2)

你可能想要这样的东西:

while (in.hasNext()) {
    System.out.println("letter = " + in.next());
    System.out.println("integer1 = " + in.nextInt());
    System.out.println("integer2 = " + in.nextInt());
}