为什么我得到空?
为什么当我打电话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;
}
}
您正在创建一个新的对象的空间并打印其描述为空 将您的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;
}
希望这能解决您的问题。
在代码中有toStringLong()吗? – 2014-09-29 03:56:06
我的+1在哪里?大声笑 – 2014-09-29 04:07:42
谢谢!这解决了它! – 2014-09-29 20:58:41
当运行该代码“空间空间=新的空间();”在toStringLogn()方法的内部,会创建新的空间对象,并且此对象的所有即时变量都将使用其默认值进行初始化。该字符串的默认值为“null”。这就是为什么当你使用这个对象时你会得到空值。
这是更好地重新定义toStringLong()如下,
字符串组合=的toString()+ “至” + _destination.getDescription();
返回组合;
这可以很容易地用最基本的调试技巧解决。 – 2014-09-29 03:47:46