2014-09-29 183 views
-3

为什么当我打电话System.out.println(classroom.toStringLong())我得到了:教室:一个大空的演讲厅,零空值为零?为什么我得到空?

正确的输出应该是:教室:与去外面门大讲堂到人行道

public class Main { 
    public static void main(String[] args) { 
     Space classroom = new Space(); 
     classroom.setName("classroom"); 
     classroom.setDescription("a large lecture hall"); 
     Space sidewalk = new Space(); 
     sidewalk.setName("sidewalk"); 
     sidewalk.setDescription("a plain concrete sidewalk with weeds growing through the cracks"); 
     Portal door = new Portal(); 
     door.setName("door"); 
     door.setDirection("outside"); 
     door.setDestination(sidewalk); 
     classroom.setPortal(door); 
     System.out.println(classroom.toStringLong()); 
    } 
} 

public class Space { 
    private String _name; 
    private String _description; 
    private Portal _portal; 

    public static void main(String[] args) { 
    // TODO Auto-generated method stub 

    } 
    public String getName() { 
    return _name; 
    } 

    public void setName(String _name){ 
    this._name=_name; 
    } 
    public String getDescription() { 
    return _description; 
    } 

    public void setDescription(String _description){ 
    this._description=_description; 
    } 
    public Portal getPortal() { 
    return _portal; 
    } 

    public void setPortal(Portal _portal){ 
    this._portal=_portal; 
    } 
    public String toString(){ 
    return _name; 
    } 
    public String toStringLong(){ 
    if (_portal!= null){ 
     Portal p= new Portal(); 
     p.toStringLong(); 
     String Longcombined=_name + ": " + _description+" with a "+p.toStringLong(); 
     return Longcombined; 
    } 
    else{ 
     String Long=_name + ": " + _description; 
     return Long; 
    } 
    } 
} 

public class Portal { 
    private String _name; 
    private String _direction; 
    private Space _destination; 

    public String getName() { 
    return _name; 
    } 

    public void setName(String _name){ 
    this._name=_name; 
    } 
    public String getDirection(){ 
    return _direction; 
    } 
    public void setDirection(String _direction){ 
    this._direction=_direction; 
    } 
    public Space getDestination(){ 
    return _destination; 
    } 
    public void setDestination(Space _destination){ 
    this._destination=_destination; 
    } 
    public String toString(){ 
    String combined=_name+ " that goes "+_direction; 
    return combined; 
    } 
    public String toStringLong(){ 
    Space space=new Space(); 
    String combined=toString() + " to " + space.getDescription() ; 
    return combined; 
    } 

} 
+2

这可以很容易地用最基本的调试技巧解决。 – 2014-09-29 03:47:46

回答

3

您正在创建一个新的对象的空间并打印其描述为空 将您的toStringLong()方法重写为

In class Space 

public String toStringLong(){ 
if (_portal!= null) 
{ 
// comment this Portal p= new Portal(); 
_portal.toStringLong(); 
String Longcombined=_name + ": " + _description+" with a "+_portal.toStringLong(); 
return Longcombined; 
} 
else 
{ 
String Long=_name + ": " + _description; 
return Long; 
} 
} 


Class Portal -> 

public String toStringLong() 
{ 
String combined=toString() + " to " + _destination.getDescription() ; 
return combined; 
} 

希望这能解决您的问题。

+1

在代码中有toStringLong()吗? – 2014-09-29 03:56:06

+0

我的+1在哪里?大声笑 – 2014-09-29 04:07:42

+0

谢谢!这解决了它! – 2014-09-29 20:58:41

0

当运行该代码“空间空间=新的空间();”在toStringLogn()方法的内部,会创建新的空间对象,并且此对象的所有即时变量都将使用其默认值进行初始化。该字符串的默认值为“null”。这就是为什么当你使用这个对象时你会得到空值。

这是更好地重新定义toStringLong()如下,

字符串组合=的toString()+ “至” + _destination.getDescription();
返回组合;