给出一个文件,该文件是学生名册,其中第一行是班级的学生人数,接下来的行中提供了他们的姓名,ID和年龄,例如:
5
Mary, 1010, 15
Ben, 1119, 16
Sam, 2278, 15
Alex, 3245, 15
Mia, 4448, 16
我应该创建一个学生对象数组,但是当我尝试编译代码时会收到“不匹配错误”。
我尝试了以下方法,但是我不确定我的代码有什么问题。
public class Classroom_Runner{
public static void main(String[] args)throws Exception{
File roster = new File("info.txt");
Scanner scanFile = new Scanner(roster);
Scanner scanInput = new Scanner(System.in);
//roster.split(", ");
//String insideFile = "";
int sizeClass = 0;
Classroom[] Students = new Classroom[0];
while(scanFile.hasNext()){
sizeClass =scanFile.nextInt();
String name = scanFile.next(); //<-- This would be line 35
int ID = scanFile.nextInt();
int age = scanFile.nextInt();
Classroom student = new Classroom( name, age, ID);
}
for(int i = 0; i<Students.length;i++){
System.out.println(Students[i]);}
}
}
实际输出为:
Exception in thread "main" java.util.InputMismatchException
at Classroom_Runner.main(Classroom_Runner.java:35)
但预期输出应为:
Mary, 1010, 15
Ben, 1119, 16
Sam, 2278, 15
Alex, 3245, 15
Mia, 4448, 16
答案 0 :(得分:0)
这是因为“ 1010”不是逗号int
的{{1}},因此以下行不运行:
,
要么删除输入文件中的逗号,要么使用int ID = scanFile.nextInt();
,用next()
删除逗号,然后将其强制转换为substring()
。
另一个更好的解决方案是在每次迭代时使用int
,然后在将需要转换的值转换为scanFile.nextLine()
之前,使用String.split(", ")
将不同的值放入数组中。
答案 1 :(得分:0)
sizeClass =scanFile.nextInt();
String name = scanFile.next();
String temp = scanFile.next();
temp = temp.substring(0, temp.length() -1);
int realID = Integer.parseInt(temp);
//rest of your code
您应该删除尾部的逗号,以便以正确的格式捕获整数。
答案 2 :(得分:0)
您可以使用Files.lines()
和Java Streams轻松实现此目标:
Classroom[] students = Files.lines(Paths.get("info.txt")).skip(1)
.map(line -> line.split(", "))
.filter(parts -> parts.length == 3)
.map(parts -> new Classroom(parts[0], Integer.parseInt(parts[1]), Integer.parseInt(parts[2])))
.toArray(Classroom[]::new);
首先,您阅读了所有行(跳过第一行,则不需要)。然后,您在每一部分中用,
分隔每一行。为防止IndexOutOfBoundException
,只能处理包含3个部分的行。最后,将每一行映射到Classroom
对象,并将所有行收集到一个数组中。
您提供的输入结果将为:
Classroom[name='Mary', age=1010, id=15]
Classroom[name='Ben', age=1119, id=16]
Classroom[name='Sam', age=2278, id=15]
Classroom[name='Alex', age=3245, id=15]
Classroom[name='Mia', age=4448, id=16]