2012-11-09 31 views
0

基于Head First书籍中的一个例子,我遇到了一些麻烦,其中toString方法引起了我的学生问题,他们正在正确输出uni和home地址。所有我想要做的是输出如果学生uni地址是空的使用他的家庭地址,否则使用uni one。内部类问题,toString冲突

但我的测试数据如下所示

约翰John72诺丁汉驱动

John72诺丁汉驱动

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"; 
    } 
} 

}

回答

3

getHomeAddress方法负责显示的单地址,所以这行:

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

可以缩短为:

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

否则你getHomeAddress方法将拉动单地址,那么你的getUniAddress方法将再次拉出uni地址。

同样在你的地址toString你拉的人的名字,你可能并不是故意的(因为你在其他toString方法有一个换行符,你可能不希望在这里换行)。

@Override 
public String toString(){ 
    return number + " " + street; 
} 
+1

在每个toString()中也有'\ n'可能也是不可取的。 –

+0

啊不能相信我没有注意到,我想这就是新鲜的眼睛。谢谢。 – Melky