gpt4 book ai didi

java - Java中返回先前枚举值的方法

转载 作者:塔克拉玛干 更新时间:2023-11-01 23:08:06 25 4
gpt4 key购买 nike

我有以下枚举:

enum Rank{TWO, THREE, FOUR, FIVE, SIX, SEVEN, EIGHT, NINE, TEN, JACK, QUEEN,
KING, ACE}

我希望创建两种方法。返回先前值的一个。例如,如果在 FOUR 上调用该方法,则返回 THREE。另一个返回整数值。例如,TWO 返回 2,JACK、QUEEN 和 KING 返回 10,ACE 返回 11。

提前致谢

最佳答案

第一个问题可以通过向 Rank 枚举添加方法(如我进一步列表中的 getValue)来解决。它不是唯一的解决方案——例如,也可以使用静态工厂方法。

对于第二个问题,您应该向 Rank 枚举引入接受 int 值的新构造函数,然后在枚举实例声明中使用该构造函数。

现在让我们将这两个更改与您的原始枚举结合起来:

enum Rank {
TWO(2), THREE(3), FOUR(4), FIVE(5), SIX(6), SEVEN(7),
EIGHT(8), NINE(9), TEN(10), JACK(10), QUEEN(10), KING(10), ACE(11);

private int value;

//private constructor which accepts int value for each card.
//It means that ACE(11) call creates ACE instance which holds value of 11 inside
Rank(int i) {
value = i;
}

public int getValue() {
return value;
}

public Rank getPrevRank(){
return values()[ordinal() > 0 ? ordinal() - 1 : 0];
}
}

现在你可以写:

System.out.println(Rank.FIVE.getPrevRank());//prints FOUR
System.out.println(Rank.ACE.getValue());//prints 11
System.out.println(Rank.FIVE.getPrevRank().getValue());//prints 4

PS:对于您的第一个问题,您也可以使用此 util 方法而不对 Rank 枚举本身进行任何更改:

public static Rank getPreviousRank(Rank currentRank){
return Rank.values()[currentRank.ordinal() > 0 ? currentRank.ordinal() - 1 : 0];
}

例子:

System.out.println(getPreviousRank(Rank.FIVE)); //prints FOUR

关于java - Java中返回先前枚举值的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36158888/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com