Tim*_*imo 5 java enums combinations
我有一个非常棘手的问题,目前无法找到答案:
我拥有的是一个带有 x 变体的枚举,例如:
public enum Symbol {
ROCK,
PAPER,
SCISSORS;
}
Run Code Online (Sandbox Code Playgroud)
这个枚举应该扩展一个、两个……变体(如石头、布、剪刀、史波克、蜥蜴),我正在寻找一个选项来存储组合的结果(在示例中,谁获胜)。就像在《石头、剪刀、布》中一样,我无法为枚举分配权重/值,然后可以将其用于比较。比较的结果不是基于逻辑的。我目前正在做的是:
public Result calculateResult(Symbol hand2) {
Symbol handP1 = this;
Symbol handP2 = hand2;
if (handP1 == Symbol.ROCK) {
switch (handP2) {
case SCISSORS:
return Result.WIN;
case ROCK:
return Result.TIE;
case PAPER:
return Result.LOOSE;
} ....
Run Code Online (Sandbox Code Playgroud)
我对比较的第一个元素的每个可能选项都执行此操作(在示例 hand1 中)。对于 3 个枚举,这非常简单和整洁,但是对于 4,5 个或更多,它很快就会变得混乱。使用 if 和 else if 进行比较也不太合适。有没有更好的方法来处理这个问题?
如果你想自己尝试一下,我已经设置了一个 repl:REPL 链接
使用 for 或更多选择打破了 3 个选择可能存在的循环关系。请参阅此处的示例:
感谢您提供任何可能帮助我获得更好解决方案的提示和提示
像这样的东西可以帮助
public enum Symbol {
ROCK,
SCISSORS,
PAPER;
private List<Symbol> beats;
static {
ROCK.beats = Arrays.asList(SCISSORS);
SCISSORS.beats = Arrays.asList(PAPER);
PAPER.beats = Arrays.asList(ROCK);
}
public Result calculateResult(Symbol hand2) {
if (this.beats.contains(hand2)) return Result.WIN;
if (hand2.beats.contains(this)) return Result.LOOSE;
return Result.TIE;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
625 次 |
| 最近记录: |