尝试读取具有各种但已知输入类型的文件并获取 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();
我正在尝试读取一个看起来完全像这样的文件
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();