对象构造函数中的Java ArrayList

时间:2014-02-02 18:58:26

标签: java arraylist constructor

我正在尝试创建ArrayList,其成员也都有ArrayList。我的想法是我有ArrayList个模块,然后每个模块也应该有自己的ArrayList个学生,但是我很难为它创建构造函数。这是我到目前为止所得到的

import java.util.*;

public class Module {

    private String code;
    private ArrayList<Student> students;

    public Module(){
        students = new ArrayList<Student>();
    }

    public Module(String newCode,  ArrayList<Student> students){
    }

    public String getCode() {
        return code;
    }
    public void setCode(String code) {
        this.code = code;
    }
}

我正在尝试让构造函数工作,但我认为它只创建了一个通用ArrayList,而我希望每个模块都有自己的学生集。关于如何处理这个问题的任何建议都将非常感激。


加载学生ArrayList我一直在使用扫描仪

public void loadStudents(String fileName) throws FileNotFoundException{
    Scanner infile =new Scanner(new InputStreamReader
                               (new FileInputStream(fileName)));

    int num=infile.nextInt();infile.nextLine();
    for (int i=0;i<num;i++) {
        String u=infile.nextLine();
        String s=infile.nextLine();
        String n=infile.nextLine();
        String c=infile.nextLine();

        Student st = new Student(u,s,n,c);
        students.add(st);

    }
    infile.close();    
}

但我不确定如何加载ArrayList ArrayList

3 个答案:

答案 0 :(得分:0)

看起来你做对了......我没有看到你的方法存在任何缺陷,除非你要列出static做什么你想要的。

正如现在所读,Module的每个实例都包含Students的列表。这里的关键是要记住在需要时实例化Module的新实例,并适当地填充列表。

答案 1 :(得分:0)

您的代码将按预期工作。由于ArrayList学生为non-static,因此Module的每个实例都有自己的ArrayList。此外,您希望设置适当的setter和getter来管理ArrayList

答案 2 :(得分:0)

因为您的问题似乎是加载列表列表,特别是如何从文本文件中获取列表列表。

这里的问题是你的文本文件格式。就像现在一样,每个学生在你的文件中占用4行,文件中只有学生。

有很多可能的方法可以做到这一点,其中之一是:

对于你的模块列表,你可以在文件的开头有一行,告诉你有多少个模块,每个模块开头的两个特定行告诉你:

  1. 模块的代码
  2. 模块中的学生人数
  3. 接下来将是通常格式的学生。之后,将重复模块标题行。

    示例代码:

    public ArrayList<Module> loadModules(String filename) throws FileNotFoundException {
        Scanner infile = new Scanner(new InputStreamReader(new FileInputStream(filename)));
        int numModules = infile.nextInt();
        infile.nextLine();
        ArrayList<Module> modules = new ArrayList<Module>(numModules);
        infile.nextLine();
        for (int i = 0; i < numModules; i++) {
            String code = infile.nextLine();
            int numStudents = infile.nextInt();
            infile.nextLine();
            ArrayList<Student> students = new ArrayList<Student>(numStudents);
            for (int j = 0; j < numStudents; j++) {
                String u = infile.nextLine();
                String s = infile.nextLine();
                String n = infile.nextLine();
                String c = infile.nextLine();
                Student st = new Student(u,s,n,c);
                students.add(st);
            }
            Module md = new Module(code, students);
            modules.add(md);
        }
        infile.close();
        return modules;
    }
    

    要加载的示例文件:

    2
    module1
    4
    student1u
    student1s
    student1n
    student1c
    student2u
    student2s
    student2n
    student2c
    student3u
    student3s
    student3n
    student3c
    student4u
    student4s
    student4n
    student4c
    module2
    1
    student1u
    student1s
    student1n
    student1c
    

    希望我能提供帮助, // 265

    编辑:更正了第2行中的fileName引用错误