-1

私はJavaが初めてで、初めてコンポジションを使用しようとしています。属性として文字列名とオブジェクト pAddress を受け取る Person というクラスを作成しました。これには、2 つのコンストラクターと 1 つのコピー コンストラクター、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)); 

彼らは同じ住所を持っています 私は間違った答えを受け取ります ここで何が問題なのですか?

4

1 に答える 1

1

ああ....あなたの問題がわかります。

Address を送信する Address コンストラクターで、次のようにします。

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();
}

そして、対応するすべてのセッター/ゲッター。

于 2013-01-01T15:11:36.970 に答える