Java 为什么“返回名称”为get null?
我有两个数组和两个类。我需要有一个用户名和用户年龄的输出,但是由于返回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
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;
}
}