0

使用する

 double variable = inputFile.nextDouble();

不一致エラーが発生し、理由がわかりません...何が起こっているのか知っている人はいますか?

入力ファイルは、5.0 のような double の集まりです...

さて、ここにコードスニペットがあります

String fileName;
Scanner scanner = new Scanner(System.in);
System.out.println("\nEnter file name that contains the matrix and vector: ");
fileName = scanner.nextLine();
Scanner inputFile = new Scanner(fileName);


double a1 = inputFile.nextDouble();

入力ファイルは、この形式のプレーン テキスト ドキュメント .txt です。

5.0 4.0 -3.0
4.0 2.0  5.0
6.0 5.0 -2.0
-13.0 4.0 12.0

なぜそれらをダブルスと見なさないのか理解できません...

ファイルのフォーマットが期待されている限り...バイナリだと思いますか?それがデフォルトじゃない?コードで指定しませんでした...

4

2 に答える 2

1

InputMismatchExceptionスキャナーが文字列を解析できない形式に解析しようとした結果です。たとえば、Double.parseDouble「3.3メートル」などの文字列を呼び出すと、NumberFormatExceptionがスローされます。iccthedralが追加したように、「3.0」(空白に注意)のような自明でない文字列でもNFEになります。

でNumberFormatExceptionが発生するScanner.nextDouble()と、NFEはラップされ、InputMismatchExceptionで再スローされます。これは、ここで発生していることです。

スキャナーdoubleを読み取れるようにするには、スキャナーに次のdoubleがある場合にのみ、呼び出しScanner#hasNextDouble()てdoubleの取得に進みます。

于 2012-09-20T17:08:03.183 に答える
1

事前にチェックを入れる

if (inputFile.hasNextDouble()) { 
 double variable = inputFile.nextDouble();
} else if (inputFile.hasNext()) {
 System.out.println("Not double at token " + inputFile.next());
}

失敗する理由と場所を正確に特定するためです。

区切り文字がそうではなく" "、手動で指定していない可能性があります。区切り文字を設定するには、いずれかのuseDelimiter(...)関数を呼び出します。


于 2012-09-20T17:06:09.000 に答える