【问题标题】:Create an array where every value is an enum?创建一个数组,其中每个值都是一个枚举?
【发布时间】:2014-01-16 23:45:24
【问题描述】:

我正在尝试创建一副牌,我将从中选择来制作一张地图。我有 16 张卡片,有两种不同的类型。

我的班级首先有一个枚举:

package Game;
public class Terrain {
    public static enum Ter{
        DESERT, MOUNTAIN
    }
} 

现在我有一个班级地图:

package Game;
import Game.Terrain.Ter;

public class Map {

    Ter mapPieces[] =  {Ter.DESERT, Ter.DESERT, Ter.DESERT, Ter.DESERT,
                        Ter.DESERT, Ter.DESERT, Ter.DESERT, Ter.DESERT,
                        Ter.MOUNTAIN, Ter.MOUNTAIN, Ter.MOUNTAIN, Ter.MOUNTAIN,
                        Ter.MOUNTAIN, Ter.MOUNTAIN, Ter.MOUNTAIN, Ter.MOUNTAIN};

}

这就是我制作数组的方式吗?有一个更好的方法吗?它看起来很可怕......

【问题讨论】:

    标签: java arrays enums


    【解决方案1】:

    您需要按如下方式创建一个集合:

    Set<Terrain> terrains = EnumSet.allOf(Terrain.class);
    

    并将其转换为数组。您也可以使用values() 方法。详情请见here on SO

    【讨论】:

    • 您不能将EnumSet 分配给List
    【解决方案2】:

    假设您要创建一个表示图块的地图,每个图块都是您的地形枚举之一,一种常见的做法是将字符串或什至 XML 解析到列表中。例如,您可以有“DDDDDDDDMMMMMMMM”,然后为每个 D 添加一个 Ter.DESERT 到您的列表等。

    对于您的简单情况,循环也很有意义。只需将 8 Ter.DESERT 和 8 Ter.MOUNTAIN 添加到您的列表中,然后将其转换为数组。如果您不想使用列表,那么您可以遍历您的数组,使所有偶数元素为沙漠,奇数元素为山。

    有很多不同的方法来做到这一点。你给予的方式应该行得通,但我同意它看起来很糟糕。

    【讨论】:

    • 感谢您的所有建议,我确信这不是我最终的结果,但学习正确的做事方式仍然很好。
    猜你喜欢
    • 2012-01-18
    • 1970-01-01
    • 2013-05-17
    • 2017-07-07
    • 2017-01-12
    • 2015-07-16
    • 2017-01-17
    • 1970-01-01
    • 2013-06-18
    相关资源
    最近更新 更多