3 回答

TA貢獻(xiàn)1851條經(jīng)驗(yàn) 獲得超4個(gè)贊
獲得所需內(nèi)容的“面向?qū)ο蟆狈椒ㄊ歉采w類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貢獻(xiàn)1871條經(jīng)驗(yàn) 獲得超8個(gè)贊
exit不是您可以用String. 在 OO 世界中,它應(yīng)該是對(duì)更有意義的對(duì)象的引用。我會(huì)和
public Collection<Room> getExits();
或者
public Map<String, Room> getExits();
它準(zhǔn)確地描述了您可以從大廳到達(dá)哪里。在這里,我們假設(shè)“出口”是通往另一個(gè)房間的門口。
你可以回來
Arrays.asList(northRoom, eastRoom, southRoom, westRoom);
或者
Map<String, Room> map = new HashMap<>();
map.put("north", northRoom);
...
return map;
然后您將能夠提供String返回集合中的任何表示。
它就像一個(gè)放置在大廳里的標(biāo)志,可以幫助人們導(dǎo)航。盡管它可以用另一個(gè)標(biāo)志(更詳細(xì)/準(zhǔn)確的標(biāo)志)代替,但建筑物的結(jié)構(gòu)是不變的,您不會(huì)改變它。您只是以不同的方式表示它。
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貢獻(xiàn)1877條經(jīng)驗(yàn) 獲得超1個(gè)贊
這是一種做事的方法。這有點(diǎn)尷尬,因?yàn)槟仨殲槊糠N情況檢查 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);
}
添加回答
舉報(bào)