Java中的组合 - 获取空输出

时间:2013-01-01 14:54:02

标签: java composition

我是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)); 

他们有相同的地址我得到一个错误答案这里有什么问题?

1 个答案:

答案 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。