Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
GoslingJava2.doc
Скачиваний:
140
Добавлен:
23.02.2016
Размер:
2.39 Mб
Скачать

1.5.Порядок выполнения

“Порядком выполнения” называется очередность, в которой выполняются операторы программы. Один из примеров воздействия на порядок выполнения— цикл while в программе для вывода чисел Фибоначчи. К числу других операторов, изменяющих порядок выполнения, относятся конструкции if/else, for, switch, do/while и блоки— несколько операторов, сгруппированных внутри фигурных скобок { и }. Давайте усовершенствуем программу для вывода чисел Фибоначчи— перенумеруем все члены последовательности и пометим нечетные числа звездочкой:

/** Вывести несколько первых чисел Фибоначчи,

помечая нечетные числа символом ‘*’ */

static final int MAX_INDEX = 10;

public static void main (String[] args) {

int lo = 1;

int hi = 1;

String mark;

System.out.println(“1: ” + lo);

for (int i = 2; i < MAX_INDEX; i++) {

if (hi % 2) == 0)

mark = “ *”;

else

mark = “”;

System.out.println(i + “: ” + hi + mark);

hi = lo + hi; // Изменение значения hi

lo = hi — lo; /* Новое значение lo равно

старому hi, то есть сумме

за вычетом старого lo */

}

}

}

Вот как выглядит результат работы программы:

1: 1 2: 1 3: 2 * 4: 3 5: 5 6: 8 * 7: 13 8: 21 9: 34 *

Для упрощения нумерации ряда вместо while используется цикл for. Цикл for является частным случаем while с добавлением инициализации и приращения переменной цикла. Приведенный выше цикл for эквивалентен следующему циклу while:

{

int i = 2;

while (i < MAX_INDEX) {

// .. вывод

i++;

}

}

Оператор ++ в этом фрагменте может показаться непонятным тому, кто не знаком с языками программирования, восходящими к C. Этот оператор увеличивает на единицу значение переменной, к которой он применяется,— в данном случае, i. Оператор ++ является префиксным, если он стоит перед операндом, и постфиксным, если он стоит после него. Аналогично, оператор — уменьшает на единицу значение переменной, к которой он применяется, и также может быть префиксным или постфиксным. Операторы ++ и — ведут свое происхождение из языка программирования C. В приведенном выше примере оператор

i++;

может быть заменен выражением

i = i + 1;

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

i += 1;

Значение в правой части оператора += (то есть 1) прибавляется к значению переменной в левой части (то есть i), и результат записывается в ту же переменную. Большинство бинарных операторов в Java (другими словами, операторов с двумя операндами) может аналогичным образом объединяться с оператором =.

Внутри цикла for используется конструкция if/else, проверяющая текущее значение hi на четность. Оператор if анализирует значение выражения в скобках. Если оно равно true, то выполняется первый оператор или блок внутри оператора if. Если же значение равно false, то выполняется оператор или блок, следующий за ключевым словом else. Наличие else не требуется; если else отсутствует и условие равно false, то блок if пропускается. После выполнения одной из двух возможных ветвей конструкции if/else, управление передается оператору, следующему за оператором if.

В нашем примере проверка hi на четность осуществляется с помощью оператора %. Он вычисляет остаток от деления левого операнда на правый. Если значение слева четно, то остаток будет равен 0, и следующий оператор присвоит переменной marker звездочку— индикатор для пометки четного числа. Для нечетных чисел выполняется условие else, присваивающее marker пустую строку.

Метод println выполняется несколько сложнее— оператор + используется для конкатенации следующих строк: i, разделитель, строка для значения hi и строка-индикатор. В случае применения оператора +к строкам он выполняет их конкатенацию, тогда как в арифметических выражениях он занимается сложением.

Упражнение 1.7

Модифицируйте цикл так, чтобы значение переменной i изменялось не в прямом, а в обратном направлении.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]