如何使用字符串引用类中的公共int

问题描述:

我正在研究基于文本的冒险游戏,并且试图尽可能多地设置外部,以便我可以与想要的朋友合作写故事情节。到目前为止,我有三节课。带有标题,说明和一组退出的房间类。还有一个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文件中的字符串?

的快速和肮脏的解决办法是实现一个方法做字符串比较并返回适当的常量。但你也应该考虑使用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

尝试使用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