2011-12-12 40 views
1

我正在研究基於文本的冒險遊戲,並且試圖儘可能多地設置外部,以便我可以與想要的朋友合作寫故事情節。到目前爲止,我有三節課。帶有標題,說明和一組退出的房間類。還有一個Exit類,具有以下構造函數。如何使用字符串引用類中的公共int

public Exit(int direction, Room connection); 

退出也有公衆詮釋變量,指的是不同的方向:

public static final int NORTH = 0; 

這一切,所以我可以說建立在一個房間的出口:

Room r = new Room("Title","Description"); 
Room r2 = new Room("Title", "Description"); 

r.addExit(new Exit(Exit.NORTH, r2); 

這會在北側的房間r出口並通向房間r2。現在爲了實現外部化,我試圖創建一個.txt文件,我可以簡單地放置當前房間號,退出方向(字符串)以及它導致的房間號。

我能做到這一點就好了,只要讀取文件去哪裏,但我掙扎的時候我設置了方向,我不能說

Exit. /*String read from file*/ 

所以,我怎麼能訪問那些來自Exit類的公共整數使用txt文件中的字符串?

回答

1

的快速和骯髒的解決辦法是實現一個方法做字符串比較並返回適當的常量。但你也應該考慮使用BRPocock建議的enum,這是一個更清潔的方法。

int directionFromStr(String str) { 
    // Putting the string constant on the left side of the expression guards against null input 
    if ("NORTH".equalsIgnoreCase(str)) return Exit.NORTH; 
    if ("SOUTH".equalsIgnoreCase(str)) return Exit.SOUTH; 
    if ("EAST".equalsIgnoreCase(str)) return Exit.EAST; 
    if ("WEST".equalsIgnoreCase(str)) return Exit.WEST; 

    // You could also return -1 or something like that 
    throw new IllegalArgumentException("bad direction"); 
} 
+0

是的,我希望有一個比這更簡單的方法。真的不想要更多的幫手方法。我會研究枚舉,感謝生菜回答。 – CaldwellYSR

+0

大投票雖然因爲我不知道關於把字符串常數在左側防止null! – CaldwellYSR

2

嘗試使用enum代替。

public enum ExitDirection { NORTH = 0, … }; 

    ExitDirection foo = ExitDirection.valueOf (stringFromFile); 

...否則,你就得咬東西的子彈像

if (stringFromFile.equals("NORTH")) { foo = NORTH; } else if (stringFromFile ... (廣告nauseum)

+0

有趣。我還沒有學過枚舉。我會研究一下。 – CaldwellYSR

+0

那麼這是在Exit類中完成的嗎?如果是的話,我會參考它: Exit.ExitDirection.valueOf(stringFromFile); – CaldwellYSR

+0

如果你沒有在其他地方使用它們,那麼把它們作爲內部課堂使用並不是一個壞主意。如果它們更普遍有用,那麼可能會將它們分解爲他們自己的「頂級」類。 (一個'enum'是一個特例類...但不是非常特殊的,它只是添加了一些語法糖。) – BRFennPocock

相關問題