Массив как параметры для статуса переключения

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

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
0
6 657
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

Ответ принят как подходящий

Я думаю, что вы ищете 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? Или, возможно, вы имели в виду теорию (хеширование) в целом?

http://www.gnu.org/software/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, но я думаю, что это тоже должно сработать.

Да, это тоже работает. Только это действительно больше не имеет отношения к вопросу (как и ответ Питера Лоури).

Michael Myers 26.02.2009 23:40

Если ваш выбор - использовать enum, а ваша коллекция enum имеет большой размер:

МАГИЯ:

Если вы работаете в затмение, он сделает для вас «волшебство», просто вам нужно написать следующее (с учетом принятого кода ответа):

switch (day) {
}

выберите switch и нажмите Ctrl + 1, и волшебство сработает! (все значения enum будут занесены в разделы case вашего блока switch)

Другие вопросы по теме