我有两个数组和两个类。我需要输出用户的名称和年龄,但由于返回null,我有“名称”的问题。 “年龄”工作正常。我的错误在哪里?
<App />
输出结果为:
null
16
答案 0 :(得分:1)
这是因为您在第二次迭代时覆盖了users
数组中的现有对象。
for(int i = 0; i<names.length; i++){ //array is named 'names'
User u = new User();
u.setName(names[i]);
users[i] = u;
}
for(int j = 0; j<ages.length; j++){
user[i].setAge(ages[j]); // using the existing object here
}
另一方面,我假设您将根据用户数量命名年龄映射。因此,做以下事情应该是安全的:
if(names.length != ages.length) {
// input mismatch for ages and names ; do some action in this condition
} else {
for(int i = 0; i<names.length; i++){
users[i].setName(names[i]);
users[i].setAge(ages[i])
}
}
答案 1 :(得分:1)
您在第二个循环中重新分配新的User
,默认情况下name
设置为null
。您应该重复使用现有的User
对象,例如
for(int j = 0; j<ages.length; j++){
users[j].setAge(ages[j]);
}
在一个循环中完成两个赋值(因为数组的长度相同)
for(int i = 0; i<users.length; i++){
User u = new User();
u.setName(names[i]);
users[j].setAge(ages[i]);
users[i] = u;
}
或添加构造函数,并将名称和年龄传递给它:
for(int i = 0; i<users.length; i++){
User u = new User(names[i], ages[i]);
}
如果您允许以这种方式设置name
和age
,您也可以使该类不可变:
public class User {
final String name;
final int age;
public User(String name, int age) {
this.name = name;
this.age = age;
}
public String getName(){
return name;
}
public int getAge(){
return age;
}
}