这是一个快艇游戏,这个方法应该计算并返回五个骰子的值。但这是一种愚蠢的方法吗?有一个 switch 语句,通过参数传递用户选择的类别,然后为每个可能的类别进行 for 循环。有没有比我的设计想法更简单的方法?
private int assignScoreToCategory(int category)
{
int computedScore = 0;
println("dice: "+dice1+" "+dice2+" "+dice3+" "+dice4+" "+dice5);
// Switches on the category the user has selected.
switch (category)
{
case ONES:
for (int i = 0; i < 4; i++){
if (diceArray[i] == ONES){
println(computedScore);
computedScore++;
}
}break;
case TWOS:
break;
case THREES: break;
case FOURS: break;
case FIVES: break;
case SIXES: println("cat 6"); break;
case UPPER_SCORE: break;
case UPPER_BONUS: break;
case THREE_OF_A_KIND: break;
case FOUR_OF_A_KIND: break;
case FULL_HOUSE: break;
case SMALL_STRAIGHT: break;
case YAHTZEE: break;
case CHANCE: break;
case LOWER_SCORE: break;
case TOTAL: break;
default: return 0;
}
return computedScore;
}
最佳答案
你绝对应该使用enum
而不是int
。然后,作为进一步的改进,将 switch 语句中包含的逻辑移动到枚举的实例方法中。然后,您只需调用一个方法即可替换switch
。有很好的语法为每个枚举成员提供不同的实现。将这个想法与一个通用方法实现相结合,该实现可以覆盖尽可能多的基础,可能还需要一些实例变量的帮助:
enum Category {
private final int score;
...
ONES(1) {
public int score() {
int computedScore = 0;
for (int i = 0; i < 4; i++) {
if (diceArray[i] == ONES) {
println(computedScore);
computedScore++;
}
}
return computedScore;
}
},
...,
SIXES(6),
...;
private Category(int score) { this.score = score; }
public int score() { return this.score; }
}
我想给你一个更完整的例子,但你没有提供太多具体的逻辑。
关于java - 我是否以正确的方式使用 switch 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12807551/