0

Head Firstの本の例の1つに基づいて、toStringメソッドが学生に問題を引き起こし、大学と自宅の住所が正しく出力されているという少し問題があります。私がやろうとしているのは、学生のユニアドレスが空の場合は出力し、自宅の住所を使用するか、それ以外の場合はユニアドレスを使用することだけです。

しかし、私のテストデータは次のようになります

ジョン ジョン ノッティンガム ドライブ 72 番地

ジョン 72 ノッティンガム ドライブ

public class Test {
public static void main(String[] args){
    Student student1 = new Student("John", 19, "Walkers Way");
    student1.setUniAddress(72, "Nottingham Drive");
    System.out.print(student1.toString());
    }
}

その他のクラス

public class Student {
private String name;
private Address homeAddress, uniAddress;

public Student(String name, int houseNumber, String homeStreet){
    this.name = name;
    this.homeAddress = new Address(houseNumber, homeStreet);
}



public String getName() { return this.name; }
public Address getHomeAddress(){
    if(this.uniAddress == null){
        return this.homeAddress;
    }else{
        return getUniAddress();//this.uniAddress;
    }
}
    
public Address getUniAddress() { return this.uniAddress; }
public void setUniAddress(int number, String add){
    Address address = new Address(number, add);
    uniAddress = address;
}

@Override
public String toString(){
    return getName() + " " + getHomeAddress() + " " + getUniAddress() + "\n";
}

public class Address{
    private int number;
    private String street;
    public Address(int no, String street){
        this.number = no;
        this.street = street;
    }
    
    @Override
    public String toString(){
        return name + number + " " + street + "\n";
    }
}

}

4

1 に答える 1

3

あなたのgetHomeAddressメソッドはuniアドレスの表示を処理するので、この行は次のようになります。

return getName() + " " + getHomeAddress() + " " + getUniAddress() + "\n";

次のように短縮できます。

return getName() + " " + getHomeAddress() + " " + "\n";

それ以外の場合、getHomeAddressメソッドはユニアドレスをプルし、次にgetUniAddressメソッドはユニアドレスを再度プルします。

また、あなたの住所では、toStringあなたはその人の名前を引っ張っていますが、おそらくそうするつもりはありませんでした(そして、他の方法で改行があるので、ここでも改行が必要ないかもしれませんtoString)。

@Override
public String toString(){
    return number + " " + street;
}
于 2012-11-09T17:47:50.883 に答える