java - 我是否以正确的方式使用 switch 语句

标签 java switch-statement

这是一个快艇游戏,这个方法应该计算并返回五个骰子的值。但这是一种愚蠢的方法吗?有一个 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/

相关文章:

java - 开关中有两个完全相同的 startactivity(),只有一个有效

wordpress - 如何在 WordPress 中切换语言 "on-the-fly"

php - 计数功能在开关中不起作用

java - 使用 java.lang.String.intern() 是一种好习惯吗?

java - Hadoop 从 Hadoop 节点的本地文件系统访问第 3 方库

基于返回类型的 Java 泛型转换?

json - 检索并使用Volley错误HTTP响应代码和开关大小写来处理错误

java - 将图像发布到 Facebook 页面

java - 控制 for 循环内的 if-else 语句

java - 我可以实例化一个开关吗?或者说这有什么问题吗?