有人能告诉我这个java代码有什么问题吗?

有人能告诉我这个java代码有什么问题吗?,java,Java,我不断遇到这样的错误,我不知道为什么: 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(

我不断遇到这样的错误,我不知道为什么:

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岁

我需要做什么来解决这个问题


编辑:我改变了文本文件,但它仍然不工作,我得到相同的错误。有人能给我看一下固定代码吗?我不明白我必须做什么。

例外是不言自明的。正在读取的参数与正在分配给它的参数类型不匹配。 最可能的错误区域是int score=input.nextInt

出于调试目的,我建议替换int score=input.nextInt;int score=input.next。这将帮助您确定错误。

默认的扫描仪分隔符是空格。因此,你接下来的一个电话是使用姓氏和分数波特,例如72。因此,nextInt调用失败

此外,当您只有两个值时,您似乎试图读取四个值,因为扫描仪将姓氏和分数视为一个。选择空格或逗号作为分隔符。如果您选择使用逗号分隔的值,那么也可以使用ScanneruseDelimiter

考虑到上述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);
}

文本文件结构不好,请使用空格分隔值。由于您的文件不包含任何中间名,因此无需检索中间名

按如下方式更改文本文件的结构:

Scores.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();

}

}

您需要修复将输入放入程序的文本文件。首先,文本记录中的行的格式应该像Tom Riddle,92,而不是Tom Riddle,92。中间名和逗号“,”之间以及分数之间应该有空格。否则,Riddle,92将作为单个标记读取,这将导致在将此标记(即字符串)分配给和整数分数时出错。

提示:尝试打印firstName、mi和lastName,然后再尝试读取int,并查看一分钟后得到的结果,查看文本文件的结构。它是否与您希望在代码中检索的数据匹配?!这给了我以下错误:线程main java.lang.ArrayIndexOutOfBoundsException中的异常:1位于Assignment20.mainAssignment20.java:18
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();

}