Читать онлайн «Основы программирования на Java». Страница 6

Автор С. Сухов

Внутри оператора switch (а также внутри циклических конструкций) break без метки приводит к передаче управления на код, стоящий после оператора switch. Если break отсутствует, после текущего раздела case будет выполняться следующий. Иногда бывает удобно иметь в операторе switch несколько смежных разделов case, не разделенных оператором break.

class SwitchSeason {

public static void main(String args[]) {

int month = 4; String season;

switch (month)

{

case 12:

case 1:

case 2:

season = "зима";

break;

case 3:

case 4:

case 5:

              season = "весна";

  break;

case 6:

case 7:

case 8:

  season = "лето";

  break;

case 9:

case 10:

case 11:

  season = "осень";

  break;

default:

   season = "Нет такого месяца";

}

System.out.println("Апрель - это "+ season + ".");

}

}

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

class WordCount {

static String text = "Сейчас мы изучаем\n" +

                     "основы программирования\n" +

                          "на языке Java\n";

static int len = text.length();

public static void main(String args[]) {

boolean inWord = false;

int numChars = 0;

int numWords = 0;

int numLines = 0;

for (int i=0; i < len; i++) {

char с = text.charAt(i);

numChars++;

switch (c) {

     case ‘\n’: numLines++;  // Увеличиваем счетчик строк

     case '\t':              // Подсчитываем количество символов

            case ‘’ : if (inWord) {

                          numWords++;

                             inWord = false;

    }

              break;

           default: inWord = true;

    }

     }

System.out.println("\t" + numLines +"\t" + numWords + "\t" + numChars);

}

}

5.4. Оператор return

В Java для реализации процедурного интерфейса к объектам классов используется разновидность подпрограмм, называемых методами. Подпрограмма main, которую мы использовали до сих пор — это статический метод соответствующего класса-примера. В любом месте программного кода метода можно поставить оператор return, который приведет к немедленному завершению работы и передаче управления коду, вызвавшему этот метод. Ниже приведен пример, иллюстрирующий использование оператора return для немедленного возврата управления, в данном случае — исполняющей среде Java.


class ReturnDemo {

public static void main(String args[]) {

boolean t = true;

System.out.println("До return");

if (t) return;

System.out.println("Этo не будет выполнено ");

}

}

ЗАМЕЧАНИЕ: Зачем в этом примере использован оператор if (t)? Дело в том, что не будь этого оператора, транслятор Java догадался бы, что последний оператор println никогда не будет выполнен. Такие случаи в Java считаются ошибками, поэтому без оператора if оттранслировать этот пример нам бы не удалось.

6. ЦИКЛЫ


Циклами называются конструкции, в которых один и тот же блок программного кода многократно выполняется до тех пор, пока не будет выполнено условие окончания цикла. Любой цикл можно разделить на 4 части: инициализацию, тело, итерацию и условие завершения. Инициализация — это код, определяющий начальные условия цикла. Тело - это оператор, выполнение которого необходимо повторить несколько раз. Итерация - код, который требуется выполнить сразу после очередного выполнения тела. Код итерации часто используется для увеличения (уменьшения) значений счетчиков и индексов. Завершение - это логическое выражение, которое вычисляется на каждом проходе цикла. В зависимости от его значения цикл или завершается или продолжает выполняться. В Java есть три циклические конструкции: while, do-while и  for.

6.1. Цикл while

Цикл while - это основная циклическая конструкция в Java. Этот цикл многократно выполняется до тех пор, пока значение логического выражения равно true. Ниже приведена общая форма оператора while:

[ инициализация; ]

while ( завершение) {

тело;

[итерация;]

}

Инициализация и итерация необязательны. Пока значение логического выражения равно true, продолжается выполнение тела цикла. Ниже приведен пример цикла while для печати пяти строк «while».

class WhileDemo {

public static void main(String args[]) {

int n = 5;

while (n > 0) {

   System.out.println("while " + n);

     n--;

           }

  }

}

В результате исполнения программы вы получите следующий результат:

while 5

while 4

while 3

while 2

while 1

6.2. Цикл do-while

Иногда возникает потребность выполнить тело цикла по крайней мере один раз, даже в том случае, когда логическое выражение с самого начала принимает значение false. Для таких случаев в Java используется циклическая конструкция do-while. Ее общая форма записи такова:


[ инициализация; ]

do {тело; [итерация;] } while ( завершение);

В следующем примере тело цикла выполняется до первой проверки условия завершения. Это позволяет совместить код итерации с условием завершения:

class Do While {

public static void main(String args[]) {

int n = 5;

do {

        System.out.println("do-while " + n);

  }  while (--n>0);

}

}

6.3. Цикл for

Опреатор for предназначен для компактной записи циклов. В этом операторе предусмотрены места для всех четырех частей цикла. Ниже приведена общая форма оператора записи for:


for (инициализация; завершение; итерация ) тело;

Любой цикл, записанный с помощью оператора for, можно записать в виде цикла while и наоборот. Если начальные условия таковы, что при входе в цикл условие завершения не выполнено, то операторы тела и итерации не выполняются ни одного раза. В канонической форме цикла for происходит увеличение целого значения счетчика с минимального значения до определенного предела.

class ForDemo {

public static void main(String args[]) {

for (int i = 1; i <= 10; i++)

       System.out.println("i = " + i);

}

}

Следующий пример — вариант программы, ведущей обратный отсчет.

class ForTick {

public static void main(String args[]) {

for (int n = 10; n > 0; n—)

          System.out.println("n= " + n);

}

}

Обратите внимание — переменные можно объявлять внутри раздела инициализации оператора for. Переменная, объявленная внутри оператора for, действует в пределах этого оператора.

6.3.1. Оператор запятая

Иногда возникают ситуации, когда разделы инициализации или итерации цикла for требуют нескольких операторов. Поскольку составной оператор в фигурных скобках в заголовок цикла for вставлять нельзя, Java предоставляет альтернативный путь. Применение запятой (,) для разделения нескольких операторов допускается только внутри круглых скобок оператора for. Ниже приведен пример цикла for, в котором в разделах инициализации и итерации стоит несколько операторов.

class Comma {

public static void main(String args[]) {

int a, b;

for (a = 1, b = 4; a < b; a++, b--) {

System.out.println("a = " + a);

System.out.println("b = " + b);

    }

}

}

Вывод этой программы показывает, что цикл выполняется всего два раза,

а= 1

b = 4

а = 2

b = 3

6.4. Оператор continue

В некоторых ситуациях возникает потребность досрочно перейти к выполнению следующей итерации, проигнорировав часть операторов тела цикла, еще не выполненных в текущей итерации. В этом случае необходимо сделать переход из текущей точки в конец цикла, т.е. в точку после последнего оператора тела цикла. Для этой цели в Java предусмотрен оператор continue. В случае циклов while и do-while оператор continue приводит к пропуску операторов тела цикла, не выполненных на данной итерации, и к передаче управления на код, проверяющий условие завершения цикла. Оператор continue, стоящий в цикле for, приводит к тому, что управление немедленно передается третьей части заголовка цикла, т.е. коду, который, выполняется на каждой итерации после операторов тела цикла. Ниже приведен пример, в котором оператор continue используется для того, чтобы в каждой строке печатались два числа,