Java关联两个ArrayLists并打印出结果

时间:2014-02-09 14:15:11

标签: java arraylist nested

我这里有一组三个ArrayLists。包含姓名,姓氏,学位和学位计划的学生的ArrayList。然后我还有一个模块列表,每个模块还包含一个学生ID的arraylist,用于注册该特定模块的学生。

我要做的是将学生的arraylist链接到用户ID的arraylist,以便程序查看ID并将它们与包含所有学生详细信息的列表进行比较,然后编写一个组合报告完整的学生详细信息和他们注册的模块。

我让我的arraylists设置得很好,但我很难通过ID访问内部arraylist。解释起来非常棘手,但这里是我的Application类的代码,它将所有内容组合在一起,你可以看到ArrayLists的布局。

import java.util.*;
import java.io.*;


public class Model {
    private ArrayList<Student> students;
    private ArrayList<Module> modules;
    private Module moduleLink;

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





    }
    public void runTests() throws FileNotFoundException{
        System.out.println("Beginning program, the ArrayList of students will now be loaded");
        loadStudents("studentlist.txt");
        System.out.println("Load attempted, will now print off the list");
        printStudents();
        System.out.println("The module list will now be loaded and printed");
        loadModules("moduleslist.txt");
        printModules();
        System.out.println("Modules printed, ArrayList assosciation will commence");






    }
    public void printStudents(){
       for(Student s: students){
           System.out.println(s.toString());
       }
    }

    public void printModules(){
        for(Module m: modules){
            System.out.println(m.toString());

        }

    }

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

    }   


    public void loadModules(String fileName) throws FileNotFoundException{
        Scanner infile =new Scanner(new InputStreamReader 
                (new FileInputStream(fileName)));
        int numModules = infile.nextInt();
        infile.nextLine();
        for (int i=0;i<numModules;i++){     

            String code = infile.nextLine();
            int numStudents = infile.nextInt();
            infile.nextLine();
            ArrayList<Student> enrolledStudents = new ArrayList<Student>(numStudents);


            for (int a=0;a<numStudents;a++){

                String uid = infile.nextLine();

                Student st = new Student(uid);
                enrolledStudents.add(st);

            }

            Module m = new Module(code,enrolledStudents );
            modules.add(m);

        }
        infile.close();
    }












}

非常感谢任何帮助,谢谢。

1 个答案:

答案 0 :(得分:0)

如果您正在寻找学生详细信息,可能您应该重新设计课程。 学生应该注册一个模块。因此,学生应该有模块。并使用Map根据id检索学生。

class Student {
    String id;
    List<Module> modules = new ArrayList<Module>();
}

loadStudents()将保持不变,除非您必须将学生ID的Map填充到您在循环中创建的Student对象。 然后,loadModules()将根据地图中的学生ID选择学生并更新模块。

您需要基于学生的数据。