Java 数组作为开关状态的选项
我记得在大学的时候用过一个带有“二进制搜索”或“二进制开关”的开关。诸如此类,我的google foo今天坏了。无论如何,它是这样的:你定义了一个可能选项的数组(通常是字符串),一些神奇的事情发生了,数组中的那些选项变成了开关发生时的情况。我记得他们必须按字母顺序来做这件事。你能帮我记住魔法吗?即使是一个我应该看的名字也会很棒。我想你要找的是一个 从上面的链接Java 数组作为开关状态的选项,java,enums,switch-statement,Java,Enums,Switch Statement,我记得在大学的时候用过一个带有“二进制搜索”或“二进制开关”的开关。诸如此类,我的google foo今天坏了。无论如何,它是这样的:你定义了一个可能选项的数组(通常是字符串),一些神奇的事情发生了,数组中的那些选项变成了开关发生时的情况。我记得他们必须按字母顺序来做这件事。你能帮我记住魔法吗?即使是一个我应该看的名字也会很棒。我想你要找的是一个 从上面的链接 public enum Day { SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURS
public enum Day {
SUNDAY, MONDAY, TUESDAY, WEDNESDAY,
THURSDAY, FRIDAY, SATURDAY
}
public class EnumTest {
Day day;
public EnumTest(Day day) {
this.day = day;
}
public void tellItLikeItIs() {
switch (day) {
case MONDAY:
System.out.println("Mondays are bad.");
break;
case FRIDAY:
System.out.println("Fridays are better.");
break;
case SATURDAY:
case SUNDAY:
System.out.println("Weekends are best.");
break;
default:
System.out.println("Midweek days are so-so.");
break;
}
}
....
}
通常,我不会以这种方式滥用开关(即使我可以)。如果您尝试,您将无法使数组在switch语句中工作,因为它只允许在case行中使用常量值。您确定您没有想到下面这样的模式或枚举吗
final int RED = 0;
final int YELLOW = 1;
final int BLUE = 2;
final int GREEN = 3;
String[] colors = new String[] { "red", "yellow", "blue", "green" };
switch (color) {
case RED:
System.out.println(colors[RED]);
break;
case YELLOW:
System.out.println(colors[YELLOW]);
break;
...the rest
}
你是说gperf吗?或者你可能是指一般的理论(散列)
使用不带开关的枚举看起来像:
public enum Day {
SUNDAY {
public String tellItLikeItIs() {
return "Weekends are best.";
}
},
MONDAY {
public String tellItLikeItIs() {
return "Mondays are bad.";
}
},
TUESDAY,
WEDNESDAY,
THURSDAY,
FRIDAY {
public String tellItLikeItIs() {
return "TGI Friday.";
}
},
SATURDAY {
public String tellItLikeItIs() {
return "Weekends are best.";
}
}
public String tellItLikeItIs() {
return "Midweek days are so-so.";
}
}
public class TodayIs{
public static void main(String... args) {
Day day = Day.valueOf(args[0].toUppercase());
System.out.println(day.tellItLikeItIs());
}
}
我不熟悉java enum,但我认为这也应该有效。如果您选择使用enum并且您的enum集合很大,请使用:
魔法:
如果您在eclipse中工作,它将为您带来“魔力”,您只需编写以下内容(考虑公认答案的代码):
选择
开关
并按Ctrl+1,魔术就开始了!(所有enum
值都将填充在开关
块的案例
部分)是的,也可以。只是它真的与这个问题无关了(彼得·劳里的答案也一样)。
public enum Day {
SUNDAY ("sundays are this"),
MONDAY ("mondays are that"),
TUESDAY ("blah"),
WEDNESDAY ("blah"),
THURSDAY ("blah"),
FRIDAY ("blah"),
SATURDAY ("more blah");
private final String tell;
public Day(String tell){
this.tell = tell;
}
public String tellItLikeItIs() {
return this.tell;
}
}
public class TodayIs{
public static void main(String... args) {
Day day = Day.valueOf(args[0].toUppercase());
System.out.println(day.tellItLikeItIs());
switch (day) {
}