在java中循环枚举的子集

Mob*_*erg 1 java enums

我有一个准备了 9 种颜色的枚举。但是对于给定的程序运行,我想循环遍历 n 个第一个值。我将如何以最好的方式做到这一点。我遇到的一个问题是我无法将 Color 与 int 进行比较。

public enum Color{WHITE, YELLOW, GREEN, TEAL, BLUE, PURPLE, PINK, ORANGE, BLACK}
private int numberOfColorsToUse = 6;
Run Code Online (Sandbox Code Playgroud)

不起作用的循环:

for(Game.Color color : Game.Color.values())
{
    if(!(color < numberOfColorsToUse))
        break;
    DrawRectangle(color);
}
Run Code Online (Sandbox Code Playgroud)

编辑:我阅读了 ordinal(),但我“不需要”使用它。这是什么意思?

msz*_*ach 5

如果它始终是前 6 种颜色,则可以使用枚举的序数。

for(Game.Color color : Game.Color.values())
{
    if(!(color.ordinal() < numberOfColorsToUse))
        break;
    DrawRectangle(color);
}
Run Code Online (Sandbox Code Playgroud)

更好的方法是使用 EnumSet 来准确指定您想要的颜色:

EnumSet.of(WHITE, YELLOW, GREEN, TEAL, BLUE, PURPLE);
Run Code Online (Sandbox Code Playgroud)

避免在更改枚举中的顺序时出现奇怪的行为。

或者,如果您想要一个范围:

EnumSet.range(WHITE,PURPLE) //has all elements from WHITE to PURPLE
Run Code Online (Sandbox Code Playgroud)