如何比较枚举类型和整型?

7

我试图使用枚举来改变颜色,但是我将枚举与整数进行比较时,它会不断抛出错误。

public class Game {

public enum State{
    RED, YELLOW, BLANK;
}

public State getState(int x, int y) {
    y=1;
    for (x=5;x>0;x--) {
  if (x== BLANK && y== BLANK) {
        return State.RED;
    }
    //return State.BLANK;
}
    return State.BLANK;
}

我该如何比较一个整数和一个枚举类型?这样我就可以改变第一列中设置为1的单元格的颜色。

2
你必须将枚举与枚举进行比较。但是,你可以将一些整数添加到你的枚举中。 - Leo
3
为什么你会希望这样做?虽然它们具有一个整型值,但是为什么你想绕过它们提供的安全性呢? - Dave Newton
2
传递参数xy,并将y设置为1并将x减少... 说实话:你的方法在做什么?! - bobbel
为什么要将坐标与枚举值进行比较?你应该做的是创建一个枚举类型的数组,并在该x/y位置上比较数组中的值。你目前所做的没有任何意义。因此出现了错误。 - Boann
我点了个踩因为这个问题没有完成并且没有意义,有趣的是普通的问题很容易被关闭,但这一个却没有被修改就存活了下来。 - Renetik
回滚了,因为问题中的代码提供了具体细节,使得答案更有意义。 - The DIMM Reaper
3个回答

8

只需使用枚举的Enum.ordinal()方法,获取从0到X的有序数字,然后可以将其与您的x变量进行比较:

public class Game {
    public enum State {
        BLANK,   // 0
        RED,     // 1
        YELLOW   // 2
    }

    public State getState(int x, int y) {
        y = 1;
        for (x = 5; x > 0; x--) {
            if (x == State.BLANK.ordinal() && y == State.BLANK.ordinal()) {
                return State.RED;
            }
            //return State.BLANK;
        }
        return State.BLANK;
    }
}

我不推荐这个解决方案,因为如果你稍后更改枚举的顺序、添加或删除元素,那么你就很麻烦了。 - Hannes
1
是的,我同意!问题在于,原帖中的代码根本就没有任何意义。因此,我不确定哪种解决方案最适合原帖作者真正的问题。只是想展示另一种可能性。 - bobbel

7

您需要为枚举类型赋值。现在,它试图比较两个不可比较的事物。

public class Game {

public enum State{
    RED(1), YELLOW(2), BLANK(0);

    private int val;

    private State(int value){
        val = value;
    }

    public int getValue(){
        return val;
    }
}

public State getState(int x, int y) {
    y=1;
    for (x=5;x>0;x--) {
        if (x== State.BLANK.getValue() && y== State.BLANK.getValue()) {
            return State.RED;
        }
        //return State.BLANK;
    }
    return State.BLANK;
}
}

1
这段代码会实现你想要的功能,但老实说我不明白为什么你会想要这样做。 - Joseph Boyle
@Leo 谢谢,我没有注意到我放置我的州代码的位置。 - Joseph Boyle
@Leo 早上非常慢 :| 谢谢 :) - Joseph Boyle
我认为你可以将方法getState变成静态的,并将其移动到State中。 - user902383

4

您可以使用ordinal()方法。它返回此枚举常量的序数(在其枚举声明中的位置,其中初始常量被分配为零)。

在您的情况下,RED.ordinal()将返回0。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接