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

时间:2013-07-28 03:42:34

标签: 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(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> 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

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

编辑:我改变了文本文件,但它仍然无法正常工作,我得到了同样的错误。有人能告诉我固定代码吗?我不明白我必须做什么。

4 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分: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);
}

答案 2 :(得分:0)

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

更改文本文件的结构,如下所示:

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

}

}

答案 3 :(得分:0)

您需要修复将输入放入程序的文本文件。首先,文本记录中的行格式应该与Tom Riddle , 92相同,而不是Tom Riddle,92。中间名和逗号','之间的空格应该在那里。否则Riddle,92将作为单个标记读取,当分配了此字符串并且为score整数时,该标记会导致错误。

相关问题