Scanner, nextInt и InputMismatchException - PullRequest
2 голосов
/ 06 мая 2011

Я пытаюсь прочитать текстовый файл, а затем распечатать целые числа в цикле, используя функцию nextInt () в Java. Текстовый файл, который у меня есть, имеет вид:

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 ]

6 голосов
/ 06 мая 2011

Я думаю, что он найдет символы, например, "a", "b", "c", которые являются String, и не сможет принять их как 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());
}
2 голосов
/ 06 мая 2011

Вы, вероятно, хотите что-то вроде этого:

while (in.hasNext()) {
    System.out.println("letter = " + in.next());
    System.out.println("integer1 = " + in.nextInt());
    System.out.println("integer2 = " + in.nextInt());
}
2 голосов
/ 06 мая 2011

hasNextLine не означает, что следующим значением является int. Входной файл, который вы разместили, содержит, например, «а», и это не int.

...