我正在制作一个学生项目分配系统,该系统从txt文件读取。这将读取文件并为它们提供最佳项目。之前,我曾尝试在与学生有关的信息(姓名,电子邮件和ID)的单独一行上做出所有项目选择,并且确实起作用。但是,我尝试将它们全部放在一行中,当我看到没有选择四个项目的人时,它就跳过了。这是txt文件:
7
Allan,A [email protected] 53027 1 3 4 2
Brown,B [email protected] 45696 1 2 3 4
Craig,C [email protected] 45667 2 1 4 3
Douglas,D [email protected] 52981 3 4 1 2
Edward,E [email protected] 45048 3
Findlay,F [email protected] 46904 2 1 3
Graham,G [email protected] 58733 2 4
顶部的数字“ 7”是学生人数,长号是ID,其他数字是项目编号。当调试器到达Edward'E的第一个项目“ 3”的唯一选择时,程序会认为他的第二个选择是Findlay,F并导致NumberFormatException错误。这是到目前为止的代码:
public Student(int id,Scanner scanner) {
listOfPreferences=new ArrayList<Project>();
projectID= new ArrayList<Integer>();
setID(id);
String name=scanner.next();
this.setName(name);
String email=scanner.next();
this.setEmail(email);
String ID = scanner.next();
this.setID(id);
//scanner.nextLine();
String preferences=scanner.next();
String totalPreferences[] = preferences.split(" ");
String preferences2=scanner.next();
String totalPreferences2[] = preferences2.split(" ");
String preferences3=scanner.next();
String totalPreferences3[] = preferences3.split(" ");
String preferences4=scanner.next();
String totalPreferences4[] = preferences4.split(" ");
for(String project: totalPreferences)
{
projectID.add(Integer.valueOf(project));
}
for(String project: totalPreferences2)
{
projectID.add(Integer.valueOf(project));
}
for(String project: totalPreferences3)
{
projectID.add(Integer.valueOf(project));
}
for(String project: totalPreferences4)
{
projectID.add(Integer.valueOf(project));
}
}
有人被困,有人可以帮忙吗?
更改您的方法以创建处理每一行的代码,例如
List<MyData> myDatas = new ArrayList<>();
for (int i = 0; i < maxLineCount; i++) {
String line = scanner.nextLine();
myDatas.add(processLine(line));
}
public MyData processLine(String line) {
// code here to create a data object from each line
// using either String#split(..)
// or using a separate Scanner created for each line and then disposed
return new MyData(....); // create your data object from the processed line
}