当前位置: 首页 > 知识库问答 >
问题:

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

闻人越
2023-03-14

我正在构建一个gradebook来存储学生和教师,每个学生和教师都有一个唯一的ID,以及他们各自在Student和Teacher对象的ArrayList中注册或教学的类。我有文件夹路径“j:/compsci/类/”,为每个类存储一个文本文件。

文本文件格式:

第1行:班级名称、教师ID、期间、荣誉?、班级ID

第2行:班级中每个学生的学生ID(用逗号分隔)。

在这里,我初始化了每个学生正在接受的所有类,每个老师正在教授的所有类,以及每个班级的所有学生和信息。

根据我到目前为止所学到的一切,我将在本地范围内重新定义类对象c,因此它应该是一个全新的对象,最初没有学生,但在下面的行中,当与调试一起打印时,它包括了以前所有类的学生。

请帮帮我我花了一个星期的时间来解决这个问题

带调试的代码

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();
    }
}

共有1个答案

诸葛砚文
2023-03-14

因为您在创建新的类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!!

但是你没有附加你的类构造函数,我想你错过了reset List students Attriburte。请添加

学生=new arraylist<>();

类构造函数。

 类似资料:
  • 我正在尝试学习C,特别是如何声明和初始化变量。我写了这段代码,我不知道为什么变量c给出了一个我还没有分配的值。 输出是-2,但我没有状态c=-2任何地方!

  • 我的类中有一个静态变量,我在cpp文件中将其实例化为值1000。 cpp文件的代码。 当我打印容器对象的ID值时,它们不断递增。 我的问题是,当我创建一个新对象时,我将静态变量实例化为值0f1000,那么为什么它会随着创建的每个对象不断递增呢?

  • 我想写一个计算长除法问题总进位的代码。这是我为carries编写的函数。我相信问题在于,第一个while循环并没有一直运行。如果是,为什么?这是在Python 3.5中实现的。

  • 我们一直在学习循环和嵌套循环。 我的问题; 为什么增量结束后,内部for循环中变量的值会自动重置?但是,在外部for循环中,变量保持其值。 例如: 在这种情况下,程序运行10次,同时将i和count增量增加到18,然后返回到6?每次。。。有人能解释一下为什么会这样吗?

  • 问题内容: 另外,在网上可以找到许多创建静态变量的解决方案。(尽管我还没有看到我喜欢的一个。) 为什么Python不支持方法中的静态变量?这被认为是非Python的,还是与Python的语法有关? 编辑: 我专门询问了 为什么 进行设计决策,但我没有提供任何代码示例,因为我想避免解释来模拟静态变量。 问题答案: 忽略这一点的想法是,静态变量仅在以下两种情况下才有用:何时真正应该使用类以及何时真正应

  • 问题内容: 我在程序中看到了与程序中此特定循环相关的不同行为,但我不确定我为什么理解它的行为方式。 的输出是 的输出是 我去网上看了以下内容 在切片上进行测距时,每次迭代都会返回两个值。第一个是索引,第二个是该索引处的元素的副本 它说一个副本,这是否意味着它返回了字符串的副本,但这实际上是指向变量的指针?在这种情况下,在循环结束时对will的任何引用都实际上引用了数组中的最后一个元素,例如?这是否