АБОБА. Справочник по программированию на Java Методическое пособие
Скачать 242.41 Kb.
|
Вложенные операторы switchОператор switch можно использовать в последовательности операторов внешнего оператора switch. Такой оператор называют вложенным оператором switch. Поскольку оператор switch определяет собственный блок, каких-либо конфликтов между константами case внутреннего и внешнего операторов switch не происходит. Например, следующий фрагмент полностью допустим: switch(count) { case 1: switch(target) {// вложенный оператор switch case 0: System.out.println("target равна 0"); break; case 1: // конфликты с внешним оператором switch отсутствуют System.out.println("target равна 1"); break; } break; case 2: // ... В данном случае оператор case1: внутреннего оператора switch не конфликтует с оператором case1: внешнего оператора switch. Программа сравнивает значение переменной count только со списком ветвей case внешнего уровня. Если значение count равно 1, программа сравнивает значение переменной target c внутренним списком ветвей case. Как правило, оператор switch эффективнее набора вложенных операторов if. Это представляет особый интерес, поскольку позволяет понять работу компилятора Java. Компилируя оператор switch, компилятор Java будет проверять каждую из констант case и создавать “таблицу переходов”, которую будет использовать для выбора ветви программы в зависимости от значения выражения. Поэтому в тех случаях, когда требуется осуществлять выбор в большой группе значений, оператор switch будет выполняться значительно быстрее последовательности операторов if-else. Это обусловлено тем, что компилятору известно, что все константы case имеют один и тот же тип, и их нужно просто проверять на предмет равенства значению выражения switch. Компилятор не располагает подобными сведениями о длинном списке выражений оператора if. Операторы циклаОператорами цикла Java являются for, while и do-while. Эти операторы образуют конструкции, обычно называемые циклами. Как наверняка известно читателям, циклы многократно выполняют один и тот же набор инструкций до тех пор, пока не будет удовлетворено условие завершения цикла. Как вы вскоре убедитесь, Java предлагает средства создания циклов, способные удовлетворить любые потребности программирования. Цикл whileОператор while – наиболее часто используемый оператор цикла Java. Он повторяет оператор или блок операторов до тех пор, пока значение его управляющего выражения истинно. Он имеет следующую общую форму: while(условие){ //тело цикла } Условием может быть любое булевское выражение. Тело цикла будет выполняться до тех пор, пока условное выражение истинно. Когда условие становится ложным, управление передается строке кода, непосредственно следующей за циклом. Фигурные скобки могут быть опущены, только если в цикле повторяется только один оператор. В качестве примера рассмотрим цикл while, который выполняет обратный отсчет, начиная с 10, вывод ровно 10 строк “тактов”: // Демонстрация использования цикла while. class While { public static void main(String args[]) { int n = 10; while(n > 0) { System.out.println("такт " + n); n--; } } } После запуска эта программа выводит десять “тактов”: такт 10 такт 9 такт 8 такт 7 такт 6 такт 5 такт 4 такт 3 такт 2 такт 1 Поскольку цикл while вычисляет свое условное выражение в начале цикла, тело цикла не будет выполнено ни разу, если в самом начале условие оказывается ложным. Например, в следующем фрагменте кода метод println() никогда не будет вызван: int a = 10, b = 20; while(a > b) System.out.println("Эта строка отображаться не будет"); Тело цикла while (или любого другого цикла Java) может быть пустым. Это обусловлено тем, что синтаксис Java допускает применение нулевого оператора (содержащего только символ точки с запятой). Например, рассмотрим следующую программу: // Целевая часть цикла может быть пустой. class NoBody { public static void main(String args[]) { int i, j; i = 100; j = 200; // вычисление среднего значения i и j while(++i < --j) ; // в этом цикле тело цикла отсутствует System.out.println("Среднее значение равно " + i); } } Эта программа вычисляет среднее значение i и j. Она генерирует следующий вывод: Среднее значение равно 150 Этот цикл while работает следующим образом. Значение i увеличивается, а значение j уменьшается на единицу. Затем программа сравнивает эти два значения. Если новое значение i по-прежнему меньше нового значения j, цикл повторяется. Если значение i равно или больше значения j, выполнение цикла прекращается. По выходу из цикла переменная i будет содержать среднее значение исходных значений i и j. Конечно, эта процедура работает только в том случае, если в самом начале значение i меньше значения j. Как видите, никакой потребности в наличии тела цикла не существует. Все действия выполняются внутри самого условного выражения. В профессионально написанном Javaкоде короткие циклы часто не содержат тела, если само по себе управляющее выражение может выполнять все необходимые действия. |