我确信有比我更好的例子:)
让我们说它正在下雪,用户可以为每个雪花赚取积分,但他们必须快速做到不要陷入雪中,所以这是我的前任:
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;
}
}
}
答案 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语句的历史,优点和缺点,以及不同语言的大量示例。