Главная » Java » Управляющие структуры Java

0

 

Термином управляющие структуры обозначают конструкции языка программирования, позволяющие регламентировать порядок выполнения выражений программы. В языке Java предусмотрены и другие конструкции for, if … else, switch и do … whi1e. Ниже представлен дополненный вариант программы, который позволяет нумеровать числа Фибоначчи и маркировать символом звездочки те из них, которые являются четными.

 

class ImprovedFibonacci {

                              

                               /** Вывод на экран последовательности

                                * нескольких чисел фибоначчи;

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

                               static final int MAX_INDEX = 9;

                              

                               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;                             

                                                      lo = hi – lo;

                                           }                                             

                               }                      

                   }

 

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

 

1: 1

2: 1

3: 2*

4: 3

5: 5

6: 8*

7: 13

8: 21

9: 34*

 

Чтобы облегчить задачу получения номеров элементов последовательности, циклу while мы предпочли конструкцию for, в которое добавлены секции инициализации переменной цикла и измене-

 

ния ее значения (в данном случае, приращения), можно считать обобщением whi1е. Цикл for, использованный в программе ImprovedFibonacci, равнозначен следующему циклу whi1е:

int i = 2;       // объявление и инициализация переменной цикла while (i <= MAX_INDEX) {

// … операции вычисления очередного числа фибоначчи

// и его вывода на экран …

i++;       // приращение содержимого переменной на единицу

}

Выражение for знакомит вас с новым механизмом объявления переменных: речь идет о переменной цикла, которая вводится в обиход в секции инициализации. Это весьма лаконичный и удобный способ объявления объектов, период существования которых ограничен временем выполнения цикла. Подобный при. ем допустим только в контексте конструкции for – ни одна из остальных управляющих структур не позволяет объявлять переменные непосредственно внутри выражений самой структуры. В рассматриваемом примере переменная i доступна только внутри тела цикла foг. Если переменная цикла объявлена именно таким образом, по его завершении она автоматически уничтожается это значит, что далее в тексте программы вы вновь вправе объявить переменную с тем же именем и пользоваться ею без ограничений.

Оператор ++ (плюс-плюс, или оператор инкремента), который использован в приведенном выше фрагменте кода, возможно, вам еще не знаком, если только у вас нет опыта программирования на языках, родственных С. Оператор предназначен для увеличения значения предшествующей ему переменной (в данном случае, i) на единицу. Оператор ++ может употребляться как в nрефиксной форме, когда он размещается перед идентификатором переменной, так и в постфиксной, если располагается следом. Названные формы обладают незначительными семантическими различиями, которые мы обсудим более подробно в главе 6. Оператор противоположного назначения, — (минус-минус, или оператор декремента), служит для уменьшения величины на единицу и так же применяется в двух формах, префиксной и постфиксной. Выражение

i++;

равнозначно следующему: i = i+1;

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

i += 1;

Последнее означает, что аргумент правой части оператора += (здесь 1) прибавляется к текущему значению переменной из левой части (в данном случае, i) и результат сохраняется в той же переменной. Подобным образом разрешенo "совмещать" с оператором = все бинарные (binary) операторы языка (т.е. такие, которые предполагают наличие двух аргументов): -=, *=, /= и Т.д.

в примере ImprovedFibonacci внутри тела цикла for мы воспользовались конструкцией if … else  для про верки того, является ли текущее значение значение переменной hi четным числом.

 

В предложении if нашего примера с помощью оператора вычисления остатка, % проверяется условие четности значения hi – оператор определяет остаток от деления аргумента левой части (hi) на операнд правой части (2). Если значение hi четно, остаток равен нулю, Т.е. логическое выражение становится истинным, и следующий оператор присваивания сохраняет в переменной mark специальный признак четности текущего числа Фибоначчи. Предложение еlse выполняется для нечетных чисел – переменной mark присваивается пустая строка.

 

Команды, в которых вызывается метод println, на сей раз более сложны, поскольку аргументами println служат выражения, сами по себе подлежащие предварительному вычислению. В первом случае используется выражение "1: " + lo, которое предполагает операцию сцепления строкового литерала "1: "с содержимым числовой переменной 1о, преобразованным в символьный вид. Поскольку изначально переменная lо содержит значение 1, в результате на экран будет выведена строка 1: 1. Оператор + выполняет функции сцепления строк (иногда употребляют заимствованный англоязычный термин конкатенация. Прим.. перев.), если по меньшей мере один из его аргументов представляет собой строку, и сложения - если все операнды относятся к числовым типам. Употребление оператора сцепления строк непосредственно в списке аргументов метода удобная краткая форма кодирования, применяемая взамен более утомительной и многословной:

 

String temp = "1: " + lo;

System.out.print1n(temp);

 

Аргументом метода println, вызываемого в теле цикла for, служит строка, состоящая из символьного представления текущего значения переменной цикла i, к Которому далее "прицеплены" литерал разделителя ": ", преобразованное в строку Содержимое числовой переменной hi и значение строковой переменной mark.

 

Упражнение 1.7. Измените конструкцию for так, чтобы отсчет переменной цикла велся в обратном, убывающем, порядке.

Источник: Арнолд, Кен, Гослинг, Джеймс, Холмс, Дэвид. Язык программирования Java. 3-е изд .. : Пер. с англ. – М. : Издательский дом «Вильяме», 2001. – 624 с. : ил. – Парал. тит. англ.

По теме:

  • Комментарии