Я помню, как еще в университете использовал переключатель с «двоичным поиском» или «двоичный переключатель». Что-то вроде этого, Мой google foo сегодня сломан. В любом случае это происходит так: вы определяете массив возможных вариантов (обычно строки), происходит некоторая магия, и эти параметры в массиве становятся случаями в переключателе. Я действительно помню, что они должны были быть в алфавитном порядке, чтобы это работало. Можешь помочь мне вспомнить волшебство? Даже название того, на что я должен смотреть, было бы фантастическим.




Я думаю, что вы ищете Enum.
По ссылке выше ...
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? Или, возможно, вы имели в виду теорию (хеширование) в целом?
Использование Enum без переключателя выглядит так:
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());
}
}
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());
Я новичок в перечислениях java, но я думаю, что это тоже должно сработать.
Если ваш выбор - использовать enum, а ваша коллекция enum имеет большой размер:
МАГИЯ:
Если вы работаете в затмение, он сделает для вас «волшебство», просто вам нужно написать следующее (с учетом принятого кода ответа):
switch (day) {
}
выберите switch и нажмите Ctrl + 1, и волшебство сработает! (все значения enum будут занесены в разделы case вашего блока switch)
Да, это тоже работает. Только это действительно больше не имеет отношения к вопросу (как и ответ Питера Лоури).