使用scanner在ArrayList的ArrayList中加载Java

使用scanner在ArrayList的ArrayList中加载Java,java,arraylist,load,Java,Arraylist,Load,我尝试使用scanner加载模块的ArrayList,然后每个模块还包含一个注册该模块的学生的ArrayList。这是我的模块构造函数: public Module(String newCode, ArrayList<Student> students){ } 我已经能够使用扫描仪加载学生,如下所示: public void loadStudents(String fileName) throws FileNotFoundException{ Scanner inf

我尝试使用scanner加载模块的ArrayList,然后每个模块还包含一个注册该模块的学生的ArrayList。这是我的模块构造函数:

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


}
我已经能够使用扫描仪加载学生,如下所示:

 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 loadStudents(字符串文件名)引发FileNotFoundException{
扫描仪内嵌=新扫描仪(新InputStreamReader
(新文件输入流(文件名));
int num=infle.nextInt();infle.nextLine();
for(int i=0;i
infle.next()
返回一个
字符串
值,因此它不能填充
ArrayList
。从文本文件填充
ArrayList
的一般方法如下:

public ArrayList<ArrayList<String>> readFile(String filename) throws IOException
{
    FileInputStream fis = new FileInputStream(filename);
    Scanner sc = new Scanner(fis);
    ArrayList<ArrayList<String>> modulesList = new ArrayList<>();

    int numModules = sc.nextInt();



    for (int i = 0; i < numModules; i++)
    {
        int numStringsPerModule = sc.nextInt();

        ArrayList<String> moduleEntries = new ArrayList<>();
        for (int j = 0; j < numStringsPerModule; j++)
        {
            String entry = sc.next();
            moduleEntries.add(entry);
        }
        modulesList.add(moduleEntries);
    }

    return modulesList;
}
public ArrayList readFile(字符串文件名)引发IOException
{
FileInputStream fis=新的FileInputStream(文件名);
扫描仪sc=新扫描仪(fis);
ArrayList modulesList=新的ArrayList();
int numModules=sc.nextInt();
for(int i=0;i

您应该能够根据您的具体情况定制此代码。一般的想法是,您需要为
循环使用嵌套的
,内部循环在单个模块中读取。

以下内容如何

 public ArrayList<Student> loadStudents(Scanner infile) throws FileNotFoundException{
    ArrayList<Student> students = new ArrayList<Student>();
    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);
    }
    return studtends;
}   
public ArrayList loadStudents(Scanner infle)抛出FileNotFoundException{
ArrayList students=新ArrayList();
int num=infle.nextInt();infle.nextLine();

对于(int i=0;i您确定要复制粘贴相同的代码吗?因为
ArrayList a=infle.next()这一行无法编译。是的,这就是问题所在。这是我试图让它工作的尝试,但显然不起作用。请正确复制粘贴
loadModules
代码。这就是我对loadModules的所有功能,我不知道它应该是什么样子。我怀疑。我更喜欢使用方法来解析子结构我尝试了原始海报。仍然会有一个内部for循环;它只是隐藏在一个方法调用中。我是从算法的角度讲的,而不是从语义的角度讲的。big-O仍然是一样的。
public ArrayList<ArrayList<String>> readFile(String filename) throws IOException
{
    FileInputStream fis = new FileInputStream(filename);
    Scanner sc = new Scanner(fis);
    ArrayList<ArrayList<String>> modulesList = new ArrayList<>();

    int numModules = sc.nextInt();



    for (int i = 0; i < numModules; i++)
    {
        int numStringsPerModule = sc.nextInt();

        ArrayList<String> moduleEntries = new ArrayList<>();
        for (int j = 0; j < numStringsPerModule; j++)
        {
            String entry = sc.next();
            moduleEntries.add(entry);
        }
        modulesList.add(moduleEntries);
    }

    return modulesList;
}
 public ArrayList<Student> loadStudents(Scanner infile) throws FileNotFoundException{
    ArrayList<Student> students = new ArrayList<Student>();
    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);
    }
    return studtends;
}   
public List<Module> loadModules(String fileName) throws FileNotFoundException{
    Scanner infile =new Scanner(new InputStreamReader 
            (new FileInputStream(fileName)));
    int num=infile.nextInt();infile.nextLine();
    List<Module> ret = List<Module>();
    for (int i=0;i<num;i++){
        String c=infile.nextLine();
        ArrayList<Student> a =loadStudents(infile);

        Module m = new Module(c,a);
            ret.add(m);
    }
    infile.close();
    return ret;
}