Вопрос о Java: действительно ли возможно иметь оператор переключения в другом?

1.Установить strawberry-perl 2. Открыть командную строку perl 3. Написать команду perl test.pl

Шаги

7
задан Ali Khaki 14 June 2019 в 08:50
поделиться

4 ответа

Да, но не надо. Если вам нужен дополнительный уровень подобной логики, поместите второй Switch в отдельный метод с описательным именем.

РЕДАКТИРОВАТЬ: В добавленном вами примере у вас есть два логических условия. Я бы не рекомендовал вообще использовать переключатель, используя вместо него условные выражения if и else . Используйте (STRING.charAt (0) == 'y') в качестве тестового примера или что-нибудь методичное, например логическое isY (final String STRING) {return (STRING.charAt (0) == 'y' || STRING.charAt (0) == 'Y'); }

18
ответ дан 6 December 2019 в 08:44
поделиться

Это возможно, но это будет очень запутанно и трудночитаемо. Почти наверняка есть лучший способ, например, вызов метода в первом операторе switch и выполнение какой-либо дополнительной необходимой обработки (включая другой переключатель, если необходимо) в этом методе.

1
ответ дан 6 December 2019 в 08:44
поделиться

Большинство языков программирования ортогональны. Это означает, что использование функции обычно не зависит от местоположения, если оно имеет смысл.

Например, вы не можете объявить локальную переменную как общедоступную.

0
ответ дан 6 December 2019 в 08:44
поделиться

Да. Коммутаторы нарушают шаблон оператора языкового блока, но это в основном из-за C / C ++, на котором основан оператор переключения, используемый в Java.

Во всех трех языках оператор переключения принимает следующую форму:

switch(variable) {
     case n:
        statement 1;
        statement n;
        (optional) break;
     case n+1:
        statement 1;
        statement n;
        (optional) break;
     // Optionally more statements
     (optional) default:
        statement 1;
        statement n;
}

Поскольку переключатель оператор ломает традиционный языковой шаблон, многие программисты заключают свои несколько операторов в case, используя традиционный блочный стиль: {}

Это связано с тем, что большинство конструкций во всех трех языках позволяют рассматривать операторы блочного стиля как один оператор, но переключатель Оператор не требует блочного стиля для выполнения нескольких операторов в одном случае.

Без оператора break, разделяющего каждый регистр, произойдет "провал" - если case n был сопоставлен и не имел разрыва, код под ним (case n + 1) будет выполнен - ​​если case n + 1 не имел разрыва и был сопоставлен, будет выполнен код по умолчанию, если ни один из них не имел разрыва, при сопоставлении case n код для case n , будут выполнены case n + 1 и default.

Значение по умолчанию является необязательным и указывает действие по умолчанию для выполнения оператора switch. Обычно условием по умолчанию является либо общий обработчик, либо хорошее место для создания исключения, если логически значение не может быть любым, кроме значений в операторе switch.

Чтобы проиллюстрировать выполнение оператора switch внутри оператора switch, взгляните на этот надуманный пример:

String message = null;
int outerVariable = getOuterVariable();
switch(outerVariable) {
     case n:
        statement 1;
        statement n;
        break;
     case n+1:
        int innerVariable = getInnerVariable();
        switch(innerVariable) {
            case 1:
                message = "IT WAS 1";
                break;
            default:
                message = "WHY WOULD YOU DO THIS?  OH THE HUMANITY!";
        }
        break;
     // Optionally more statements
     (optional) default:
        statement 1;
        statement n;
}
2
ответ дан 6 December 2019 в 08:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: