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 itemsn",
                     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,它没有问题。我在尝试运行带有十进制分数值的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)

我需要更改代码的哪一部分,以便显示十进制值,并且它们不会显示输入不匹配。

我的txt文件如下所示:data.txt

10020
12.64 8.434.21 8.4517.56 8.3113.85 12.3919.32 14.294.03 17.148.24 1.240.79 5.596.6 2018年12月6日12.24 1.676.45 19.439.88 8.7518.37 15.648.24 5.553.6 6.46.69 18.443.07 0.7111.28 10.2514.26 12.140.71 2.37

这是BandP.txt中的值:

157.5 2511 453 122 72 67 105 4

错误消息告诉问题是什么:

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()

因此,它读取了一些无法解析的内容,因为nextInt()用于读取整数,而您给它一个包含小数点的数字。

您可以将其更改为nextFloat()。这将产生其他影响。首先,您指定给的变量需要变为浮点值。这将产生多米诺骨牌效应——读取编译器错误和堆栈跟踪,遵循行号,并逐一修复它们。

我不能保证你的算法能处理浮点数字——我想你会发现的。

最新更新