尝试读取具有各种但已知输入类型的文件并获取 InputMismatchException

Trying to read a file with various but known input types and getting an InputMismatchException

我正在尝试读取一个看起来完全像这样的文件

C 8230123345450 西蒙斯珍妮 R 0 12

C 3873472785863 卡特曼埃里克 N 750 18

C 4834324308675 麦考密克·肯尼 R 0 20

O 1384349045225 Broflovski Kyle - 6 //可能问题开始

O 5627238253456 马什斯坦 T 3

澄清一下: C = 校内学生 O = OnlineStudents

代码应确定学生是在校园内还是在线,然后使用适当的方法并相应地阅读代码。它在我认为是学分变量的 readOnlineStudent 方法中崩溃。

抛出 InputMismatchException。

我不确定要尝试什么,因为一切对我来说都是正确的(显然我遗漏了一些东西)。

相关代码如下:

private ArrayList<Student>readFile() throws FileNotFoundException {
    ArrayList<Student> studentList;
    studentList = new ArrayList<>();
    Scanner in = new Scanner(new 
    File("C:\Users\KYLE\Documents\burger-cse205- 
    p02\test\input\p02-students.txt"));

    while(in.hasNext() == true){
        String studentType = in.next();
        if(studentType == "C"){
            studentList.add(readOnCampusStudent(in));
        }
        else{
            studentList.add(readOnlineStudent(in));
        }
    }
    in.close();
    return studentList;
}

private OnCampusStudent readOnCampusStudent(Scanner pIn){
    String id = pIn.next();
    String lname = pIn.next();
    String fname = pIn.next();
    OnCampusStudent student = new OnCampusStudent(id, fname, lname);
    String res = pIn.next();
    double fee = pIn.nextDouble();
    int credits = pIn.nextInt();
    if(res.equals("R")){
        student.setResidency(OnCampusStudent.RESIDENT);
    }
    else{
        student.setResidency(OnCampusStudent.NON_RESIDENT);
    }
    student.setProgramFee(fee);
    student.setCredits(credits);
    return student;
}

private OnlineStudent readOnlineStudent(Scanner pIn){
    String id = pIn.next();
    String lname = pIn.next();
    String fname = pIn.next();
    OnlineStudent student = new OnlineStudent(id, fname, lname);
    String fee = pIn.next();
    int credits = pIn.nextInt(); //this is the line that throws the error
    if(fee.equals("T")){
        student.setTechFee(true);
    }
    else{
        student.setTechFee(false);
    }
    student.setCredits(credits);
    return student;
}

如何解决这个问题?

谢谢

你有条件

if(studentType == "C") { 

应替换为

if(studentType.equals(C")) {

== 比较引用而 equals 比较实际值

您的积分值对于 int 类型来说太大了。使用长数据类型并使用 nextLong() 而不是 nextInt().
简而言之:

int credits = pIn.nextInt();
// should be...
long credits = pIn.nextLong();