-3

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)

10 進数値を表示でき、入力の不一致が表示されないように、コードのどの部分を変更する必要がありますか。

私の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.6111111111111111111111111111111116116116116116116116111616161.45 19.43 9.88 8.75 18.37

そして、これは BandP.txt の値です:

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

4

1 に答える 1

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()他のメソッドのスタックを呼び出し、そのうちの 1 つが InputMismatchException をスローしました。

Scanner.nextInt() のドキュメントには、どのような状況でその例外がスローされるかが示されています

したがって、 nextInt() は整数を読み取るためのものであり、小数点を含む数値を指定しているため、解析できないものを読み取っています。

に変更できますnextFloat()。これにより、他の効果が得られます。まず、割り当て先の変数が float になる必要があります。ドミノ効果が発生します。コンパイラ エラーとスタック トレースを読み、行番号をたどって、1 つずつ修正します。

あなたのアルゴリズムが浮動小数点数でも機能することを保証することはできません。

于 2012-08-29T11:53:31.670 に答える