在哪个更好的示例中可以表示Java中的switch语句?

时间:2010-08-17 22:02:46

标签: java switch-statement

我确信有比我更好的例子:)

让我们说它正在下雪,用户可以为每个雪花赚取积分,但他们必须快速做到不要陷入雪中,所以这是我的前任:

class apples{
    public static void main(String args[]){
        int points;
        points = 1;

        switch (points){
        case 1:
            System.out.println("32");
            break;
        case 2:
            System.out.println("Almost half");
            break;
        case 3:
            System.out.println("You're near");
            break;
        case 4:
            System.out.println("Congratulations., You got 100 points");
        default:
            System.out.println("Want to start again?");
        break;  
        }
    }
}

5 个答案:

答案 0 :(得分:4)

switch语句已经被错过了很长时间。

最初的想法是拥有一个入口点系统;像这样工作的goto类声明:

If my value is 1; goto 1;
Else If my value is 2; goto 2;
Else If my value is 3; goto 3;
Else If goto default;
label 1 : ...;
label 2 : ...;
label 3 : ...;
label default : ...;

人们开始喜欢这个系统,并认为它比拥有很多if / else语句更好。所以他们使用了一个小技巧,break;现在人们真的很喜欢这个开关作为if / else的替代品,打破了每一个开关的情况。

要拥有原始switch语句的一个很好的例子,你应该有这样的东西:

public void printDaysLeftUntilNextMonday(){
    switch(dayOfWeek){
        case 1 :
            System.out.println("Monday");
        case 2 :
            System.out.println("Tuesday");
        case 3 :
            System.out.println("Wednesday");
        case 4 :
            System.out.println("Thursday");
        case 5 :
            System.out.println("Friday");
        case 6 :
            System.out.println("Saturday");
        case 7 :
            System.out.println("Sunday");
    }
}

我当天有一个真实的用例(如果你不滥用休息,很少见;在转换中)它是在一个刽子手。

public void printHangman(){
    switch(triesLeft){
        case 1 :
            printLeftLeg();
        case 2 :
            printRightLeg();
        case 3 :
            printLeftArm();
        case 4 :
            printRightArm();
        case 5 :
            printBody();
        case 6 :
            printHead();
    }
}

答案 1 :(得分:4)

如果您希望获得比HashMap更多的灵活性(并非解决方案有任何问题),您可以使用一系列责任:

class PointScore {
   private PointScore next;
   private int points;
   private String msg;

   public PointScore(int points, String msg) {
      this.points = points;
      this.msg = msg;
      this.next = null;
   }

   public PointScore setNext(PointScore next) {
      this.next = next;
      return next;
   }

   public boolean checkScore(int points) {
      if (this.points == points) {
         System.out.println(this.msg);
         return true;
      } else if (null != next) {
         return next.checkScore(points);
      } else {
         return false;
      }

   }

}

然后是您的主要切入点:

class Apples {

   public static void main(String...args) {
      int points;
      points = 1;

      // set first condition (highest priority first)
      PointScore scores = new PointScore(4, "Congratulations., You got 100 points");
      // set next chain members in order or priority (highest to lowest)
      scores.setNext(new PointScore(3, "You're near"))
         .setNext(new PointScore(2, "Almost half"))
         .setNext(new PointScore(1, "32"));

      if (!scores.checkScore(points)) {
         System.out.println("Want to start again?");
      }
   }
}

这看起来不多,但checkScore方法可以执行其他检查;例如,您可以设置一系列值而不是单个points整数等。

答案 2 :(得分:0)

使用字典或散列映射将点数映射到字符串。

答案 3 :(得分:0)

好的,我们走了。在工作中,我们经常使用 enum 类型,简单示例:

public enum Colors {
   RED,
   GREEN,
   BLUE,
   YELLOW,
   VIOLET,
   BROWN,
   ORANGE; // more to come
} 

所以我们可以切换这些文字常量:

public String colorToMood(final Colors color) {
    String mood = "everything the same to me";
    switch (color) {
      case RED:
        mood = "excited";
        break;
      case YELLOW:
        mood = "I like the sun";
        break;
      case GREEN:
        mood = "forests are nice";
        break;
      case BLUE:
        mood = "I feel free like a bird in the sky";
        break;
      // fill in your code here for VIOLET, BROWN, ORANGE
      // otherwise they get handled by the default clause
      default:
        mood = "I don't know your color";
        break;
    }
    return mood;
}

也许您现在可以更好地了解交换机与枚举相关的优点。你甚至可以为你的枚举常量定义一个构造函数,但这太过高级......

答案 4 :(得分:0)

当变量的范围有界时,我发现switch语句最有意义。因此,例如,这里给出的星期几示例很好,带枚举的那个更好。

有点简单,但wikipedia有一个很好的页面,其中包含switch语句的历史,优点和缺点,以及不同语言的大量示例。