Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么“返回名称”为get null?_Java_Arrays_Null - Fatal编程技术网

Java 为什么“返回名称”为get null?

Java 为什么“返回名称”为get null?,java,arrays,null,Java,Arrays,Null,我有两个数组和两个类。我需要有一个用户名和用户年龄的输出,但是由于返回null,我的用户名有问题。年龄在起作用。我的错在哪里 public class Lesson4OOP { public static void main(String[] args) { String[] names = {"Adam","Sara", "Mike" , "David"}; int[] ages = {21, 25

我有两个数组和两个类。我需要有一个用户名和用户年龄的输出,但是由于返回null,我的用户名有问题。年龄在起作用。我的错在哪里

public class Lesson4OOP {
public static void main(String[] args) {
    String[] names = {"Adam","Sara", "Mike" , "David"};
    int[] ages = {21, 25, 34, 16};
    User[] users = new User[names.length];
    for(int i = 0; i<users.length; i++){
        User u = new User();
        u.setName(names[i]);
        users[i] = u;
    }

    for(int j = 0; j<ages.length; j++){
        User a = new User();
        a.setAge(ages[j]);
        users[j] = a;
    }
    System.out.println(users[3].getName());
    System.out.println(users[3].getAge());
    }
}

public class User {
    String names;
    int ages;

    public void setName(String val){
        names = val;
    }
    public String getName(){
        return names;
    }
    public void setAge(int num){
        ages = num;
    }
    public int getAge(){
        return ages;
    }
}
输出为:

空的

十六,


这是因为您已经用第二次迭代覆盖了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])
    } 
}

您正在第二个循环中重新分配一个新用户,默认情况下名称设置为null。您应该重复使用现有的用户对象,如下所示

for(int j = 0; j<ages.length; j++){
    users[j].setAge(ages[j]);
}

为什么要创建8个用户,4个有名字,4个有年龄?看看类用户的语义,年龄在现实中不是可变的吗,所以需要设置器,类不能是不变的?
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]);
}
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;
    }
}