创建一个数组,其中每个值都是枚举?

时间:2014-01-16 23:45:25

标签: java arrays enums

我正在尝试创建一副卡片,我将从中选择制作地图。我有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};

}

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

2 个答案:

答案 0 :(得分:2)

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

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

并将其转换为数组。您也可以使用values()方法。有关详细信息,请参阅here on SO

答案 1 :(得分:1)

假设您要创建一个表示tile的映射,每个tile都是您的Terrain枚举之一,通常的做法是将String或甚至XML解析为List。例如,您可以使用“DDDDDDDDMMMMMMMM”,然后为每个D添加一个Ter.DESERT到您的列表等。

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

有很多不同的方法可以做到这一点。你给出的方式应该有效,但我同意它看起来很糟糕。