java - 为什么我的变量没有重置每个循环?

标签 java object file-io initialization

我正在构建一个成绩簿,用于存储学生和教师,每个学生和教师都有一个唯一的 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/

相关文章:

JavaScript:向可能不存在的对象添加嵌套属性

c++ - C++ 类的大小

c++ - C++ 中的程序完美读取一个文件,但在读取另一个文件时添加 "∩╗┐",但是两个文件的内容相同。如何?

windows - 在 Windows 上模拟文件错误(例如 ERROR_ACCESS_DENIED)

java - 无法从 java 项目导入 .class 文件

java - Androidx java.lang.ClassNotFoundException : and android. view.InflateException:同时

java - 将值传递给方法然后打印它

java - Android:无法将图像粘贴到 eclipse 中的drawable-hdpi 文件夹

javascript - 如何获取集合的属性并将其放入其他对象数组中?

c - I/O系统调用