2017-10-09 73 views
1

我想创建一个新的学生,并与它们签署了科目列表实例化它们,但我不知道是否有可能或如何完成它?采取设置在构造枚举和创建列表 - Java的

我已经初步建成一个ArrayList构造函数,但我可以肯定,这是错误的。

最终的结果是,我有一个名称,ID和他们正在研究,使他们可以添加到和取出的课程,并且当受试者可编辑列表中的学生...

Student.java

private String name; 
private int id; 
private static int counter; 
private ArrayList<Subjects> subjects; 

public Student(String name, ArrayList<Subjects> subjects) { 
    this.name = name; 
    this.subjects = subjects; 
    counter++; 
    id=counter; 
} 

School.java

public class School { 

    List<Student> students = new ArrayList<>(); 

    public void addStudent(String name, ArrayList<Subjects> subjects) { 
     Student tempStudent = new Student(name,subjects); 
     students.add(tempStudent); 
    } 
} 

Run.java在我的问题来了...

public class Run { 

    public static void main(String[] args) { 
     School school = new School(); 

     school.addStudent("ABC", Subjects.English.toString()..........); 
    } 
} 

Subjects.java

public enum Subjects { 
    Maths, 
    English, 
    Science 
} 
+1

试试这个'school.addStudent( “ABC” ,Arrays.asList(Subjects.English));' – xxlali

+1

@xxlali是的,但是论据sho被声明为'List ',而不是'ArrayList '。 –

+0

@MauricePerry是的,你是对的。 – xxlali

回答

2

你没有创建一个Array也不添加Enum。更改Student类以及与其相关联的每一个方法采取List而不是ArrayList例如

private List<Subjects> subjects; 

那么你可以使用

school.addStudent("ABC", Arrays.asList(Subjects.Maths, Subjects.English)); 
+1

如果你想以后添加科目给学生,这个答案是不正确的,因为由'Arrays.asList(...)'返回的'List'不能在结构上修改。应该包裹或者在构造函数中或该列表传递新的'ArrayList',即'新的ArrayList <>参数时(Arrays.asList(Subjects.English,Subjects.Maths))'。 –

1

这里是我会做:

private String name; 
private int id; 
private static int counter; 
private List<Subjects> subjects; 

public Student(String name, Collection<Subjects> subjects) { 
    this.name = name; 
    this.subjects = new ArrayList<>(subjects); 
    counter++; 
    id=counter; 
} 

// second constructor for convenience 
public Student(String name, Subjects... subjects) { 
    this(name, Arrays.asList(subjects)); 
} 

...

public class School { 
    List<Student> students = new ArrayList<>(); 

    public void addStudent(String name, List<Subjects> subjects) { 
     Student tempStudent = new Student(name,subjects); 
     students.add(tempStudent); 
    } 

    public void addStudent(String name, Subjects... subjects) { 
     Student tempStudent = new Student(name,subjects); 
     students.add(tempStudent); 
    } 
}