-5

次のようなエラーが表示され続けますが、その理由がわかりません。

Exception in thread "main" java.util.InputMismatchException
at java.util.Scanner.throwFor(Scanner.java:840)
at java.util.Scanner.next(Scanner.java:1461)
at java.util.Scanner.nextInt(Scanner.java:2091)
at java.util.Scanner.nextInt(Scanner.java:2050)
at Assignment20.main(Assignment20.java:17)

これが私のコードです

import java.util.Scanner;
import java.io.File;

public class Assignment20{



public static void main(String[] args) throws Exception{

    File myFile = new File("scores.txt");

    Scanner input = new Scanner(myFile);

while (input.hasNext()) {
  String firstName = input.next();
  String mi = input.next();
  String lastName = input.next();
  int score = input.nextInt();
  System.out.println(
    firstName + " " + mi + " " + lastName + " " + score);
}


input.close();


}
}

読み取ろうとしているテキストファイルは次のようになります

ハリー・ポッター 72歳

ロン・ウィーズリー 68歳

ハーマイオニー・グレンジャー,98

アルバス・ダンブルドア 90歳

ネビル・ロングボトム 75歳

ルーナ・ラブグッド 86歳

ドラコ・マルフォイ 64歳

チョウ・チャン 88

ジニー・ウィーズリー 78歳

トム・リドル、92

これを修正するために何をする必要がありますか?

編集: テキスト ファイルを変更しましたが、まだ機能していません。同じエラーが発生します。誰かが固定コードを見せてもらえますか? 私は自分がしなければならないことを理解していません。

4

4 に答える 4

1

デフォルトのScanner区切り文字はスペースです。そのため、コールの 1 つはnext()スコアだけでなく姓も消費しています (たとえば、"Potter,72")。したがって、nextInt()呼び出しは失敗します。

また、2 つしかないときに 4 つの値を読み取ろうとしているようです (Scanner姓とスコアを 1 つとして扱っていることを考慮してください)。区切り文字としてスペースまたはカンマを選択します。コンマ区切りの値を選択した場合は、同様に使用Scanner#useDelimiter(",")します。

Harry,Potter,72
Ron,Weasley,68

上記のファイル形式 (csv) を考慮すると、以下のコードを使用できます。

Scanner input = new Scanner(myFile).useDelimiter(",");

while (input.hasNextLine()) {
    String[] line = input.nextLine().split(",");
    String firstName = line[0];
    String lastName = line[1];
    int score = Integer.parseInt(line[2]);
    System.out.println(firstName + " " + lastName + " " + score);
}
于 2013-07-28T03:49:47.850 に答える
0

テキスト ファイルの構造が適切ではありません。値を区切るにはスペースを使用してください。また、ファイルにはミドル ネームが含まれていないため、ミドル ネームを取得する必要はありません。

テキスト ファイルの構造を次のように変更します。

スコア.txt

Harry Potter 72
Ron Weasley 68
Hermione Granger 98
Albus Dumbledore 90
Neville Longbottom 75
Luna Lovegood 86
Draco Malfoy 64
Cho Chang 88
Ginny Weasley 78
Tom Riddle 92

これを試して:

import java.util.Scanner;
import java.io.File;

public class test {

public static void main(String[] args) throws Exception {

    File myFile = new File("scores.txt");

    Scanner input = new Scanner(myFile);

    while (input.hasNext()) {
        String firstName = input.next();

        String lastName = input.next();

        int score = input.nextInt();
        System.out.println(firstName + " " + lastName + " " + score);
    }

    input.close();

}

}

于 2013-07-28T03:49:56.000 に答える