android - 设置一个数组的元素,将其他元素设置为同一个数组
问题描述
我有一个类“college”有一个内部类“Professor”的数组参数这个内部类有一个字符串“Materials”的数组参数,我使用方法“addProfessor”将教授添加到外部类数组中,现在在这个addProfessor方法我创建一个新教授将其材料设置为传递的数组,但是每次我添加一个新教授时,数组中的所有教授都具有相同的材料数组!
这里是教授课
private class Professor{
private String Name;
private ArrayList<String> Materials;
private String Department;
public String getName() {
return Name;
}
public void setName(String name) {
Name = name;
}
public ArrayList<String> getMaterial() {
return Materials;
}
public void setMaterial(ArrayList<String> material) {
Materials = material;
}
public String getDepartment() {
return Department;
}
public void setDepartment(String department) {
Department = department;
}
@Override
public String toString() {
StringBuilder builder = new StringBuilder();
builder.append("Professor{" + "Name='").append(Name).append('\'').append("Material: ");
for(String mat : Materials){
Log.d("Material",mat);
builder.append(mat).append(",");
}
builder.append("Department: ").append(Department);
return builder.toString();
}
}
这里添加方法
public void addProfessor(String Name,@Nullable String department,@Nullable ArrayList<String> materials){
Professor professor = new Professor();
professor.setDepartment(department);
professor.setMaterial(materials);
professor.setName(Name);
professorsMap.put(Name,professor);
Professors.add(professor);
for(String mat :materials){
Log.d("ADDPROF",mat);
}
for(Professor prof : Professors){
Log.d("MatProf",prof.toString());
}
}
我添加的代码(我暗示了与教授数组无关的代码)
ArrayList<String> profMaterials = new ArrayList<>();
submitMat.setOnClickListener(v -> {
if(!professorMaterialLayout.getEditText().getText().toString().isEmpty()) {
profMaterials.add(professorMaterialLayout.getEditText().getText().toString());
professorMaterialLayout.getEditText().setText("");
}
});
submitTeacher.setOnClickListener(v -> {
String counterString = staffNumber.getText().toString();
int Count = Integer.parseInt(counterString.subSequence(counterString.indexOf("#")+1,counterString.length()).toString());
if(!professorNum.getText().toString().isEmpty()&&!assistantNumb.getText().toString().isEmpty()) {
if (Count == Integer.parseInt(professorNum.getText().toString())&&counterString.contains("Professor")) {
college.addProfessor(professorNameLayout.getEditText().getText().toString()
,professorDepartmentLayout.getEditText().getText().toString()
,profMaterials);
profMaterials.clear();
}else{
college.addProfessor(professorNameLayout.getEditText().getText().toString()
,professorDepartmentLayout.getEditText().getText().toString()
,profMaterials);
profMaterials.clear();
}
}
});*emphasized text*
解决方案
您不是Material
在任何地方创建数组列表的新实例,Professor
而是直接引用传递的Material
列表,这对所有的都是相同的Professors
,将您的addProfessor
方法修改为下面
public void addProfessor(String Name,@Nullable String department,@Nullable ArrayList<String> materials){
Professor professor = new Professor();
professor.setDepartment(department);
//create new instance for each professor
professor.setMaterial(new ArrayList<>(materials));
professor.setName(Name);
professorsMap.put(Name,professor);
Professors.add(professor);
for(String mat :materials){
Log.d("ADDPROF",mat);
}
for(Professor prof : Professors){
Log.d("MatProf",prof.toString());
}
}
推荐阅读
- ruby-on-rails - 根据日期获取一个季节内的事件数量
- c# - C# 将基本 JSON 记录重新格式化为标头和详细信息输出
- npm - 在管道部署期间找不到模块
- python - 如何在 Flask 中返回获取 JSON POST 请求的数据库?
- r - 如何在 ggplot2 中自定义图例?
- python - Django:具有多对多的高级 StringAgg
- c# - 如何根据比较两个列表将属性更新为 true 或 false
- python - 导入中的 Python 全局变量 *
- java - Intellij 建议在没有变量名的情况下进行初始化
- c - 关于分配内存的问题:C [UBUNTU]