我已经定义了一个班级的学生'。该类的每个实例都有一个名称和n * m首选项(它们是String)。
public class Student {
String firstName;
List<List<String>> choice = new ArrayList<List<String>>();
public Student(String name1, List<List<String>> preference){
this.firstName = name1;
this.choice.addAll(preference);
}
}
接下来,我有一个列表,其中可以保存每个学生对象。
List<Student> students = new ArrayList<Student>();
现在的问题是,当我在列表中保存一名学生时,它工作正常。但是,当我将第二个学生添加到列表中时,第一个学生的首选项将被覆盖。我添加并读取数据如下,
List<List<String>> preferences = new ArrayList<List<String>>();
List<String> preferences1 = new ArrayList<String>();
List<String> preferences2 = new ArrayList<String>();
// add first student
preferences.clear(); preferences1.clear(); preferences2.clear();
preferences1.add("Company1"); preferences1.add("Company3");
preferences2.add("Company2"); preferences2.add("Company4");
preferences.add(preferences1); preferences.add(preferences2);
students.add(new Student("Michiel", preferences));
// add second student
preferences.clear(); preferences1.clear(); preferences2.clear();
preferences1.add("Company5"); preferences1.add("Company7");
preferences2.add("Company6"); preferences2.add("Company8");
preferences.add(preferences1); preferences.add(preferences2);
students.add(new Student("William", preferences));
System.out.println(students.get(0).choice);
System.out.println(students.get(1).choice);
出了什么问题?我已经尝试了#final;#39;在课堂上。
PS。一个小的子问题,你建议使用Arraylist或List吗?
答案 0 :(得分:2)
添加下一个List
时,您无法重复使用相同的Student
。您保存的内容仅供参考,因此稍后清除它将清除您保存的所有首选项。为每个List
创建新的Student
个偏好设置,您就可以了:
...
preferences = new ArrayList<List<String>>();
preferences1 = new ArrayList<String>();
preferences2 = new ArrayList<String>();
// add second student
preferences1.add("Company5"); preferences1.add("Company7");
preferences2.add("Company6"); preferences2.add("Company8");
preferences.add(preferences1); preferences.add(preferences2);
students.add(new Student("William", preferences));
PS。一个小的子问题,你建议使用Arraylist或List吗?
你在做什么看起来很好。您需要选择List
界面的一些具体实现,并选择ArrayList
,这是完全合理的。
此外,您正在声明接口类型List
的变量,这是执行此操作的首选方法。
答案 1 :(得分:0)
您需要为每个学生创建一个新的偏好列表,如下所示:
List<List<String>> preferences1 = new ArrayList<List<String>>();
List<String> preferences1 = new ArrayList<String>();
List<String> preferences2 = new ArrayList<String>();
// add first student
preferences.clear(); preferences1.clear(); preferences2.clear();
preferences1.add("Company1"); preferences1.add("Company3");
preferences2.add("Company2"); preferences2.add("Company4");
preferences.add(preferences1); preferences.add(preferences2);
students.add(new Student("Michiel", preferences));
// add second student
List<List<String>> secondPreferences = new ArrayList<List<String>>();
List<String> secondPreferences2 = new ArrayList<String>();
List<String> secondPreferences3 = new ArrayList<String>();
// preferences1.clear(); preferences2.clear(); preferences3.clear(); // you don't need to clear those ! as they are new lists
secondPreferences2.add("Company5"); secondPreferences2.add("Company7");
secondPreferences3.add("Company6"); secondPreferences3.add("Company8");
secondPreferences.add(preferences1); secondPreferences.add(preferences2);
students.add(new Student("William", secondPreferences));
System.out.println(students.get(0).choice);
System.out.println(students.get(1).choice);
祝你好运。