我正在构建一个成绩簿,用于存储学生和教师,每个学生和教师都有一个唯一的 ID,以及他们各自在 Student 和 Teacher 对象中的 ArrayList 中注册或教学的类(class)。我有文件夹路径“J:/compsci/Classes/”,存储每个类的文本文件。
文本文件格式:
第 1 行:类(class)名称、教师 ID、学期、荣誉学位、类(class) ID
第 2 行:类(class)中每个学生的学生 ID,以逗号分隔。
在这里,我初始化每个学生正在参加的所有类(class)、每个老师正在教授的所有类(class)以及每个类(class)的所有学生和信息。
根据我到目前为止所学到的一切,我正在本地范围 for 循环中重新定义类对象 c,因此它应该是一个全新的对象,最初没有学生,但在下面的行中,它包括以前所有类(class)的学生在打印时进行调试。
请帮助我花了一周时间尝试解决这个问题
可调试的代码
File[] classes = new File("J:/compsci/Classes/").listFiles();
for (File currentClass: classes) {
System.out.println(currentClass.getPath());//proves that i'm moving to a different class
try (Scanner fileReader = new Scanner (new FileInputStream (currentClass.getPath()))){
String[] classInfo= fileReader.nextLine().split(",");
for (String s: classInfo)//all the info going into the parameters for a new class
System.out.print(s+",");
System.out.println();
Class c = new Class (classInfo[0],classInfo[1],Integer.parseInt(classInfo[2]),classInfo[3].equals("H"),currentClassID());
for (Student s: c.getStudents())//PROBLEM!! should always be empty initially and not store students from previous classes!!
System.out.print(s.getID()+",");
System.out.println();
String[] studentslist= fileReader.nextLine().split(",");
for (String s: studentslist)
c.addStudent((Student)getUserFromID(s));
((Teacher)getUserFromID(classInfo[1])).addClass(c);
for (String s: studentslist) {//prints the only students that are actually supposed to be in the class
System.out.println(s);
((Student)getUserFromID(s)).addClass(c);
}
CLASSLIST.add(c);//global arraylist storing all classes
} catch (Exception e) {
e.printStackTrace();
}
}
控制台输出
J:\compsci\Classes\APBiology.txt
AP Biology,00009,5,H,00001,
00001
00003
00004
00011
J:\compsci\Classes\Chinese5AP.txt
Chinese 5 AP,00007,0,H,00002,
00001,00003,00004,00011,
00005
00011
J:\compsci\Classes\ComputerScienceA.txt
Computer Science A,00007,2,H,00003,
00001,00003,00004,00011,00005,00011,
00001
00002
00003
00004
00005
J:\compsci\Classes\ComputerSciencePrinciples.txt
Computer Science Principles,00007,3,H,00004,
00001,00003,00004,00011,00005,00011,00001,00002,00003,00004,00005,
00003
00004
00005
00011
00001
没有任何调试的代码
File[] classes = new File("J:/compsci/Classes/").listFiles();
for (File currentClass: classes) {
try (Scanner fileReader = new Scanner (new FileInputStream (currentClass.getPath()))){
String[] classInfo= fileReader.nextLine().split(",");
String[] studentslist= fileReader.nextLine().split(",");
Class c = new Class (classInfo[0],classInfo[1],Integer.parseInt(classInfo[2]),classInfo[3].equals("H"),currentClassID());
((Teacher)getUserFromID(classInfo[1])).addClass(c);
for (String s: studentslist)
c.addStudent((Student)getUserFromID(s));
for (String s: studentslist)
((Student)getUserFromID(s)).addClass(c);
CLASSLIST.add(c);//global arraylist storing all classes
} catch (Exception e) {
e.printStackTrace();
}
}
最佳答案
由于您的问题是在创建新的 C 类之后发生的:
Class c = new Class (classInfo[0],classInfo[1],Integer.parseInt(classInfo[2]),classInfo[3].equals("H"),currentClassID());
for (Student s: c.getStudents())//PROBLEM!! should always be empty initially and not store students from previous classes!!
但是您没有附加您的类构造函数,我猜您错过了重置列表学生属性。请添加
students = new ArrayList<>();
到类构造函数。
关于java - 为什么我的变量没有重置每个循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49828367/