我是java的新手并且第一次尝试使用合成。我构建了一个名为Person的类,它将字符串名称和对象pAddress作为属性。它有两个构造函数和一个复制构造函数,一个设置PAddress属性的方法和一个方法String toString:
public class Person {
private String name;
private Address pAddress;
///*constructor that gets the city, street, number, zip from Address class*/
public Person (String name, String city, String street, int number, int zip)
{
this.name=name;
pAddress =new Address(city, street, number, zip);
}
public Person (String name, Address a)
{
this.name=name;
pAddress = new Address (a);
}
//**copy constructor**
public Person (Person other){
this.name=other.name;
this.pAddress= new Address (pAddress);}
//**set method for pAddress**
public void setPAddress(String city, String street, int number, int zip)
{
pAddress.setCity(city);
pAddress.setNumber(number);
pAddress.setStreet(street);
pAddress.setZip(zip);
}
**//String toString method**
public String toString(){
return this.name + ", " + pAddress;
}
但是,当我尝试打印String toString方法时,我得到了对象部分的NULL值。更具体一点:
public static void main (String[]args){
Address Home=new Address("New York","5th Avenue", 112, 111);
Person a=new Person("Carl",Home);
System.out.println(a);
}
最后一个println出来了:
Carl, Address: nullst., 0, null
下面列出了Address类:
public class Address {
private String city, street;
private int number, zip;
public Address (String c, String s, int n, int z){
city=c;
street=s;
number=n;
zip=z;
}
public Address (Address a)
{
this.city=city;
this.street=street;
this.number=number;
this.zip=zip;
}
public Address (String c, String s, int n)
{
zip=0;
city=c;
street=s;
number=n;
}
public String toString(){
if (zip==0)
return "Address: " + street + "st., " + number + ", " + city ;
return "Address: " + street + "st., " + number + ", " + city + ", " + zip;
}
我添加了一个比较对象中值的方法:
public boolean sameAddress(Person p){
Person b=new Person (p.getName(), p.getPAddress());
if (p.getName()==name)
return true;
return false;
应该检查Person的地址是否是两个对象的名称。
public static void main (String[]args){
Address Home=new Address("New York","5th Avenue", 112, 111);
Person a=new Person("Carl",Home);
Person b=new Person ("Carl",a.getPAddress());
System.out.println(b.sameAddress(a));
他们有相同的地址我得到一个错误答案这里有什么问题?
答案 0 :(得分:1)
啊......我看到了你的问题。
在你的地址构造函数中,你发送一个地址:
public Address (Address a)
{
this.city=city;
this.street=street;
this.number=number;
this.zip=zip;
}
您需要将其更改为:
public Address (Address a)
{
this.city=a.getCity();
this.street=a.getStreet();
this.number=a.getNumber();
this.zip=a.getZip();
}
以及所有相应的setter / getters。