【问题标题】:How to reference a public int within a class with a string如何使用字符串引用类中的公共 int
【发布时间】:2011-12-12 23:56:26
【问题描述】:

我正在开发一款基于文本的冒险游戏,并且我正在尝试将尽可能多的设置外部化,以便我可以与想要编写故事情节的朋友一起工作。到目前为止,我已经上了三个课。具有标题、描述和出口数组的房间类。也是一个带有以下构造函数的 Exit 类。

public Exit(int direction, Room connection);

出口也有指向不同方向的公共 int 变量:

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*/

那么如何使用 txt 文件中的字符串从 Exit 类中访问这些公共整数?

【问题讨论】:

    标签: java oop file variables public


    【解决方案1】:

    尝试改用enum

      public enum ExitDirection { NORTH = 0, … };
    
      ExitDirection foo = ExitDirection.valueOf (stringFromFile);
    

    …否则,你只需要硬着头皮用类似的东西

    if (stringFromFile.equals("NORTH")) { foo = NORTH; } else if (stringFromFile ... (令人作呕)

    【讨论】:

    • 有趣。我还没有学过枚举。我会调查的。
    • 那么这是在 Exit 类中完成的吗?如果是这样,我会说:Exit.ExitDirection.valueOf(stringFromFile);
    • 如果您没有在其他任何地方使用它们,那么将它们作为内部类放置并不是一个坏主意。如果它们更普遍有用,您可以将它们分解为它们自己的“顶级”类。 (enum 是一个特例类……但不是特别特别。它只是添加了一些语法糖。)
    【解决方案2】:

    快速而肮脏的解决方法是实现一种方法来进行字符串比较并返回适当的常量。但您也应该考虑使用 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");
    }
    

    【讨论】:

    • 是的,我希望有比这更简单的方法。真的不想制作更多的辅助方法。我会研究枚举,不过感谢生菜的回答。
    • 投了赞成票,因为我不知道将字符串常量放在左侧以防止出现空值!
    猜你喜欢
    • 2011-10-24
    • 1970-01-01
    • 2011-07-13
    • 1970-01-01
    • 2012-05-11
    • 2013-06-06
    • 2021-12-17
    • 1970-01-01
    • 2017-05-08
    相关资源
    最近更新 更多