2014-02-02 4 views
0

Я пытаюсь создать ArrayList, члены которого также имеют ArrayList. Идея состоит в том, что у меня есть модули ArrayList, и тогда у каждого модуля также должен быть свой собственный ArrayList студентов, но мне трудно создать конструктор для него. Это то, что я получил до сих порJava 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.

+1

Я думаю, что ваш код будет делать то, что вы хотите. С какими проблемами вы сталкиваетесь? –

ответ

0

Похоже, вы делаете это правильно ... Я не вижу каких-либо недостатков в вашем подходе, если вы не составите этот список static, который бы не сделал то, что вы хотите.

Как он читает сейчас, каждый экземпляр Module содержит список Students. Кикер здесь должен помнить, чтобы создать новые экземпляры Module, когда вам это нужно, и заполнить список соответствующим образом.

+0

Я думаю, что здесь большая проблема. Я пытаюсь заставить его загрузить ArrayList из ArrayLists из текстового файла, и я не уверен, как это сделать. Я использую сканер для загрузки в ученики, я добавлю код в исходное сообщение –

0

Ваш код будет работать так, как планировалось. Поскольку ученики ArrayList составляют non-static, каждый экземпляр Module будет иметь свой собственный ArrayList. Кроме того, вы должны установить соответствующие сеттеры и геттеры для управления ArrayList.

0

Как представляется, ваша проблема связана с загрузкой списка списков, в частности, как получить список списков из текстового файла.

Проблема заключается в вашем текстовом формате. Как и сейчас, каждый ученик занимает 4 строки в вашем файле, и в этом файле нет ничего, кроме студентов.

Есть много возможных способов сделать это, вот один из них:

Для список ваших модулей вы могли возможно иметь одну строку в начале файла говорит вам, сколько модулей есть и два конкретных линий в начало каждого модуля, что вам сказать:

  1. код модуля
  2. количество студентов в модуле

T Следующие ученики будут в обычном формате. После этого строки модуля будут повторяться.

Пример кода:

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

EDIT: Исправлена ​​ошибка имя_файла Ссылка в строке 2

+0

Это похоже на то, что мне нужно, но я получаю эту ошибку, когда пытаюсь скомпилировать: Исключение в потоке "main "java.lang.Error: проблема неразрешенной компиляции: \t fileName не может быть разрешено переменной –

+0

@ LukaszMedza О, простите меня, я написал файлName один раз с помощью camelCase и oce без него. Позвольте мне исправить это ^^ – Ferdi265

Смежные вопросы