3 回答
TA贡献1851条经验 获得超4个赞
获得所需内容的“面向对象”方法是覆盖类toString()中的方法Room,以便它返回房间的名称。
然后修改getExits(),如下所示:
public String getExits (){
StringBuilder sb = new StringBuilder();
if(this.north != null) sb.append(this.north.toString()).append(" North") else sb.append("No Exit for: North");
...
return sb.toString();
}
....
public class Room {
private String name;
...
@Override
public String toString() {
return this.name;
}
}
TA贡献1871条经验 获得超8个赞
exit不是您可以用String. 在 OO 世界中,它应该是对更有意义的对象的引用。我会和
public Collection<Room> getExits();
或者
public Map<String, Room> getExits();
它准确地描述了您可以从大厅到达哪里。在这里,我们假设“出口”是通往另一个房间的门口。
你可以回来
Arrays.asList(northRoom, eastRoom, southRoom, westRoom);
或者
Map<String, Room> map = new HashMap<>();
map.put("north", northRoom);
...
return map;
然后您将能够提供String返回集合中的任何表示。
它就像一个放置在大厅里的标志,可以帮助人们导航。尽管它可以用另一个标志(更详细/准确的标志)代替,但建筑物的结构是不变的,您不会改变它。您只是以不同的方式表示它。
String simpleSign = "You can go to: " + getExits().stream().map(Object::toString).collect(Collectors.join(", "));
或者
String detailedSign = "Directions to go: " + getExits().entrySet().stream().map(e -> e.getKey() + " -> " + e.getValue().toString()).collect(Collectors.join("\n"));
TA贡献1877条经验 获得超1个赞
这是一种做事的方法。这有点尴尬,因为您必须为每种情况检查 null - 如果不是这种情况,您可以删除这些检查。
public String getExits (){
List<String> exits = new ArrayList<>();
if (north != null) exits.add("North: " + north.name);
if (south != null) exits.add("South: " + south.name);
if (east != null) exits.add("East: " + east.name);
if (west != null) exits.add("West: " + west.name);
return String.join("\n", exits);
}
添加回答
举报