-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

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

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

于 2013-07-28T03:46:54.347 回答
1

默认Scanner分隔符是空格。因此,您的一个next()调用是使用姓氏和分数(例如“Potter,72”)。因此,nextInt()呼叫失败。

此外,当您只有两个值时,您似乎试图读取四个值(考虑将Scanner姓氏和分数视为一个)。选择空格或逗号作为分隔符。如果您选择使用逗号分隔的值,那么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 回答
0

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

于 2013-07-28T03:55:53.327 回答