Java: руководство для начинающих (ЛП) - Шилдт Герберт
Шрифт:
Интервал:
Закладка:
Выполнение этой программы дает следующий результат:i is less than onei is less than twoi is less than threei is less than fouri is less than fivei is less than twoi is less than threei is less than fivei is less than threei is less than fouri is less than fivei is less than fouri is less than fivei is less than five
Как демонстрирует приведенный выше пример, выполнение программы будет продолжено в следующей ветви case в отсутствие оператора break. А в следующем примере кода показано, что в операторе switch могут присутствовать пустые ветви case:switch(i) { case 1: case 2: case 3: System.out.println("i is 1, 2 or 3"); break; case 4: System.out.println("i is 4"); break;}
Если в приведенном выше фрагменте кода переменная i имеет значение 1, 2 или 3, то вызывается первый метод println (). А если ее значение равно 4, вызывается второй метод println (). Такое расположение нескольких пустых ветвей case подряд нередко используется в тех случаях, когда нескольким ветвям должен соответствовать один и тот же общий код.Вложенные операторы switch
Один оператор switch может быть частью последовательности операторов другого, внешнего оператора switch. И такой оператор switch называется вложенным. Константы выбора внутреннего и внешнего операторов switch могут содержать общие значения, не вызывая никаких конфликтов. Например, следующий фрагмент кода является вполне допустимым:switch(chi) { case 'A1: System.out.println("This A is part of outer switch."); switch(ch2) { case 'A1: System.out.println("This A is part of inner switch"); break; case 'B' : // ... } // конец внутреннего оператора switch break; case 'B': // ...
Пример для опробования 3.1.Начало построения справочной системы Java
В этом проекте предстоит создать простую справочную систему, предоставляющую сведения о синтаксисе управляющих операторов Java. Программа, реализующая эту справочную систему, отображает меню с названиями операторов и ожидает выбора одного из них. Как только пользователь выберет один из пунктов меню, на экран будут выведены сведения о синтаксисе соответствующего оператора. В первой версии данной программы предоставляются сведения только об операторах if и switch. Ав последующих проектах будут добавлены справочные данные об остальных управляющих операторах.
Последовательность действий
Создайте новый файл Help.java.
В начале работы программы отображается следующее меню:Help on:1. if2. switchChoose one:Для этой цели потребуется приведенная ниже последовательность операторов.System.out.println("Help on:");System.out.println(" 1. if");System.out.println(" 2. switch");System.out.print("Choose one: ");
Далее программа получает данные о выборе пользователя. С этой целью вызывается метод System.in.read(), как показано ниже.choice = (char) System.in.read();
После этого в программе используется оператор switch для отображения сведений о синтаксисе выбранного оператора.switch(choice) {case 111: System.out.println("The if:n"); System.out.println("if(condition) statement;"); System.out.println("else statement;"); break;case 12’ : System.out.println("The switch:n"); System.out.println("switch(expression) {"); System.out.println(" case constant:"); System.out.println(" statement sequence"); System.out.println(" break;"); System.out.println (" // ..."); System.out.println("}"); break;default: System.out.print("Selection not found.");}Обратите внимание на то, как в ветви default перехватываются сведения о неправильно сделанном выборе. Так, если пользователь введет значение 3, оно не совпадет ни с одной из констант в ветвях case оператора switch, и тогда управление будет передано коду в ветви default.
Ниже приведен весь исходный код программы из файла Help.java./*Пример для опробования 3.1. Простая справочная система.*/class Help { public static void main(String args[]) throws java.io.IOException { char choice; System.out.println("Help on:") ; System.out.println(" 1. if"); System.out.println(" 2. switch"); System.out.print("Choose one: "); choice = (char) System.in.read(); System.out.println("n") ; switch(choice) { case '1': System.out.println("The if:n"); System.out.println("if(condition) statement;"); System.out.println("else statement;"); break; case '2': System.out.println("The switch:n"); System.out.println("switch(expression) {"); System.out.println(" case constant:"); System.out.println(" statement sequence"); System.out.println(" break;"); System.out.println (" // ..."); System.out.println ("}"); break; default: System.out.print("Selection not found."); } }}
Выполнение этой программы дает следующий результат: Help on: 1. if 2. switch Choose one: 1 The if: if(condition) statement; else statement;Цикл for
Цикл for уже был представлен в главе 1, а здесь он рассматривается более подробно. Вас должны приятно удивить эффективность и гибкость этого цикла. Прежде всего обратимся к самым основным и традиционным формам цикла for.
Ниже приведена общая форма цикла for для повторного выполнения единственного оператора.for (инициализация; условие; итерация) оператор;
А вот как выглядит его форма для повторного выполнения кодового блока.fог (инициализа ция; условие; итера ция){последовательность операторов;}
где инициализация, как правило, представлена оператором присваивания, задающим первоначальное значение переменной, которая выполняет роль счетчика и управляет циклом; условие — это логическое выражение, определяющее необходимость повторения цикла; а итерация — выражение, определяющее величину, на которую должно изменяться значение переменной, управляющей циклом, на каждом шаге цикла. Обратите внимание на то, что эти три основные части оператора цикла for должны быть разделены точкой с запятой. Выполнение цикла for будет продолжаться до тех пор, пока проверка условия дает истинный результат. Как только эта проверка даст ложный результат, цикл завершится, а выполнение программы будет продолжено с оператора, следующего после цикла for.
Ниже приведен пример программы, где цикл for служит для вывода на экран значений квадратного корня чисел в пределах от 1 до 99. В данной программе отображается также ошибка округления, допущенная при вычислении квадратного корня.// Вывод квадратных корней чисел от 1 до 99 вместе с ошибкой округления,class SqrRoot { public static void main(String args[]) { double num, sroot, rerr; for(num = 1.0; num < 100.0; num++) { sroot = Math.sqrt(num); System.out.println("Square root of " + num + " is " + sroot); // вычислить ошибку округления rerr = num - (sroot * sroot); System.out.println("Rounding error is " + rerr); System.out.println() ; } }}
Обратите внимание на то, что ошибка округления вычисляется путем возведения в квадрат квадратного корня числа. Полученное значение отнимается от исходного числа.
Переменная цикла может как увеличиваться, так и уменьшаться, а величина приращения может выбираться произвольно. Например, в приведенном ниже фрагменте кода выводятся числа в пределах от 100 до -95, и на каждом шаге переменная цикла уменьшается на 5.// Цикл for, выполняющийся с отрицательным приращением переменной,class DecrFor { public static void main(String args[]) { int x; //На каждом шаге цикла управляющая им переменная уменьшается на 5. for(х = 100; х > -100; х -= 5) System.out.println(х); }}
В отношении циклов for следует особо подчеркнуть, что условное выражение всегда проверяется в самом начале цикла. Это означает, что код в цикле может вообще не выполняться, если проверяемое условие с самого начала оказывается ложным. Рассмотрим следующий пример:for(count=10; count < 5; count++) x += count; // этот оператор не будет выполнен