为什么“回名”;是null?

时间:2017-09-24 10:43:02

标签: java arrays null

我有两个数组和两个类。我需要输出用户的名称和年龄,但由于返回null,我有“名称”的问题。 “年龄”工作正常。我的错误在哪里?

<App />

输出结果为:

  

null

     

16

2 个答案:

答案 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]);
}

如果您允许以这种方式设置nameage,您也可以使该类不可变:

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;
    }
}