gpt4 book ai didi

java - 为什么 getName() 返回 null?

转载 作者:行者123 更新时间:2023-12-01 16:42:16 26 4
gpt4 key购买 nike

编辑:感谢您的所有回答!我不知道List.java中的对象p与Main.java中的p不同。我将它作为参数传递,现在工作正常。谢谢!

在Main.java中:

        System.out.println("Enter your name:");
String name = scan.next();
name+=scan.nextLine();

String words[]=name.split("\\s");
String capitalizeWord="";
for(String w:words){
String first=w.substring(0,1);
String afterfirst=w.substring(1);
capitalizeWord+=first.toUpperCase()+afterfirst+" ";
}

Person p = new Person(capitalizeWord);

In Person.java

    private String name;
private int age;

Person(String newName){
name=newName;
}

Person(int newAge){
age=newAge;
}

public String getName() {
return name;
}

public int getAge() {
return age;
}

在List.java中:

public void printInvoice(){
System.out.println("Enter your age:");
int age = scan.nextInt();

Person p = new Person(age);
System.out.println("Thank you for shopping with us, "+p.getName());
}

最后的输出是

Thank you for shopping with us, null

我不知道为什么会发生这种情况。我做错什么了吗?我认为代码是正确的?

最佳答案

每次调用构造函数时,您都会获得该对象的一个​​不同实例。在 Main.java 中创建的具有名称的对象存储在仅存在于 Main.java 范围内的局部变量 p 中。在 List.java 中,您创建了第二个对象,其中包含年龄,但没有名称。它还存储在名为 p 的变量中,但该变量仅在 List.java 范围内,与之前创建的对象无关。

听起来您想将名称添加到先前的对象而不是创建新对象。为此,您应该将第一个对象作为参数传递给添加年龄的代码,也许像这样:

public void addAge(Person p) {
System.out.println("Enter your age:");
int age = scan.nextInt();
p.setAge(age); // will have to make this method in the Person class
System.out.println("Thank you for shopping with us, "+p.getName());
}

调用 Person p = new Person(age); 会给出一个尚未命名的全新 Person 对象。

关于java - 为什么 getName() 返回 null?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61222788/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com