InputMismatchException读取小数部分

时间:2012-08-29 11:35:51

标签: java knapsack-problem branch-and-bound

http://penguin.ewu.edu/cscd501/Wint-2011/BranchAndBound/Knap01BnB.txt

的main()函数中
  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,它没有问题。我试图运行带有小数分数值的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

100 20个
12.64 8.43 4.21 8.45 17.56 8.31 13.85 12.39 19.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.55 3.6 6.4 6.69 18.44 3.07 0.71 11.28 10.25 14.26 12.14 0.71 2.37

这是BandP.txt中的值:

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

1 个答案:

答案 0 :(得分:3)

错误消息告诉您问题所在:

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()。这将产生其他影响。首先,您要分配的变量需要成为一个浮点数。会有多米诺骨牌效应 - 读取编译器错误和堆栈跟踪,按行号,然后逐个修复。

我无法保证您的算法甚至可以使用浮点数 - 我猜您会发现。