InputMismatchException чтение десятичных дробей

В функции main() http://penguin.ewu.edu/cscd501/Wint-2011/BranchAndBound/Knap01BnB.txt

  inp = new Scanner ( new File(lineIn) );

  maxWeight = inp.nextInt();
  n = inp.nextInt();
  System.out.printf ("Reading data from file %s, with %d items\n",
                     lineIn, n);

  avail = new Item[n];
  pack  = new boolean[n];

  for ( k = 0; k < n; k++ )
  {  weight = inp.nextInt();
     profit = inp.nextInt();
     avail[k] = new Item(weight, profit);
  }

Используя приведенный выше код, я попытался запустить Bandp.txt, и у него не было проблем. У меня возникла проблема при попытке запустить текстовый файл со значениями десятичной дроби:

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) at 
Knap01BnB.main(Knap01BnB.java:199)

Какую часть кодов мне нужно изменить, чтобы можно было отображать десятичные значения, и они не будут отображать несоответствие входных данных.

Мой текстовый файл, как показано ниже: data.txt

100 20
12,64 8,43 4,21 8,45 17,56 8,31 13,85 12,39,3,32 14,29 4,03 17,14 8,24 1,24 0,79 5,59 6,6 12,18 12,24 1,67 6,45 19,43 9,88 8,75 18,37 15,64 8,24 5,5 3,6 6,4 6,69 18,44 3,07 0,71 11,28 10,25 14,26 12,14 1,21 2,37

И это значения в BandP.txt:

15 7 5 25 11 45 3 12 2 7 2 6 7 10 5 4

1 ответ

Сообщение об ошибке говорит вам, в чем проблема:

Exception in thread "main" java.util.InputMismatchException at
...
java.util.Scanner.nextInt(Unknown Source) 
at Knap01BnB.main(Knap01BnB.java:199)

Строка 199 вызовов вашей программы Scanner.nextInt(), Scanner.nextInt() вызвал стек других методов, и один из них вызвал исключение InputMismatchException.

Документация для Scanner.nextInt() сообщает вам, при каких обстоятельствах оно выдает это исключение: http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Scanner.html()

Таким образом, он прочитал что-то, что не может разобрать, потому что nextInt () предназначен для чтения целых чисел, а вы даете ему число, содержащее десятичную точку.

Вы можете изменить это на nextFloat(), Это будет иметь другие эффекты. Для начала, переменная, которую вы назначаете, должна стать плавающей точкой. Будет эффект домино - читайте ошибки компилятора и трассировки стека, следуйте номерам строк и исправляйте их одну за другой.

Я не могу гарантировать, что ваш алгоритм будет работать даже с числами с плавающей запятой - думаю, вы узнаете.

Другие вопросы по тегам