Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции по Java.doc
Скачиваний:
836
Добавлен:
04.06.2015
Размер:
5.55 Mб
Скачать

Циклы с параметром

Управление работой циклов с параметромосуществляется не толькоусловием, но и значением специальной переменной –параметра цикла(счетчика).

Циклы этого типа получили наиболее широкое распространение в алгоритмических языках.

Схему цикла с параметром можно представить в следующем виде:

где x – параметр цикла– любая переменная,

x_нач– егоначальноезначение,

x_кон– егоконечноезначение,

x_шагшагего изменения (не только целое число).

В Javaциклы с параметром реализуютсяоператором цикла:

for (инициализация; условие; изменение)

{

оператор;

оператор;

оператор;

. . .

оператор;

}

где инициализация– устанавливаетначальноезначение параметра цикла,

условие– определяетусловиевыполнения цикла,

изменение – задаетизменениепараметра цикла после каждой итерации.

Действия цикла:

  1. параметру цикла xприсваивается его начальное значениеx_нач,

  2. проверяется условиевыполнения цикла: если оноистинно, то выполняется тело цикла,

  3. параметр цикла автоматически увеличивается на шаг, и цикл повторяется до тех пор, покаусловиене становитсяложным,

  4. если условиене выполняется, то цикл заканчивает работу,

  5. из цикла можно выйти досрочно, используя оператор break.

Внимание!Все три составляющие в круглых скобках разделяютсяточками с запятой. После круглых скобок точка с запятойне ставится.

Пример: определить суммуs натуральных чисел от1до100.

Схема алгоритма:

Программа:

int s = 0;

for (int n=1; n<=100; n++)// n – локальная переменная цикла

s+=n;

System.out.printf(“\ns=%d”, s);

Внимание!Параметр цикла, если он в программе больше нигде, кроме этого цикла, не используется, желательно описать каклокальную переменнуюэтого цикла внутри круглых скобок.

Этот же цикл можно организовать без тела цикла:

for (int n=1; n<=100; s+=n++);

Эту же задачу можно решить, суммируя числа справа налево, то есть от 100до1:

for (int n=100; n>=1; s+=n--);

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

for (;;);

Это бесконечный цикл. Точки с запятой в скобках должны обязательно присутствовать, даже если между ними ничего нет.

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

for (System.out.println(“Славное”); System.out.println(“море -”); System.out.println(“Байкал!”))

System.out.println(“священный”);

На экран будет выведена бесконечная последовательность:

Славное

море -

священный

Байкал!

море -

священный

Байкал!

море -

священный

Байкал!

. . . . .

Условие выполнения цикла проверяется передкаждой итерацией, а приращение параметра цикла может бытьпеременным, поэтому, в отличие отПаскаля, вJavaдопускается изменение значения параметра цикла и условия продолжения циклав телеэтого же цикла. Может отсутствовать и сам оператор, выполняемый в цикле:

for (int count=0; getch()!=’\n’; count++);

Этот цикл подсчитывает количество вводимых с клавиатуры символов, пока не будет нажата клавиша ввода(она соответствуетESC-последовательности‘\n). В этом цикле параметр циклаcountне входит в условие его выполнения - это тоже не обязательно.

В одном цикле for можно использовать одновременно несколько параметров цикла, которые при инициализации разделяютсязапятыми:

for (int i=0, int j=n; i<j; i++, j--)

{

. . . . .

}

Как и в других языках программирования, в Javaразрешено использовать цикл в цикле, при этом циклы должны иметьразныепараметры цикла:

int sum, min=6, max=10000;

System.out.printf(“\nСовершенные числа от %d до %d:\n”, min, max);

for (int num = min; num <= max; num += 2)

{

sum = 1;

for (int factor = 2; factor < num; factor++)

{

if (num % factor == 0)

sum += factor;

}

if (sum == num)

System.out.printf(“\n%d”, num);

}

Эта программа осуществляет поиск всех совершенныхчисел от6 до10000.

Для досрочногопрекращения выполнения цикла и выхода из него используется оператор прерыванияbreak:

public final int MIN=2;

public final int MAX=1000;

for (int n = MIN; n <= MAX; n++)

{

for (int i = MIN; i < n; i++)

{

if (n % i == 0)

break; //выход из внутреннего цикла

}

if (i == n)

System.out.printf(“\n%d”, n);

}

}

Эта программа осуществляет поиск всех простыхчисел от2до1000.

Во вложенных циклах команда breakпрекращает выполнение только того цикла, вкотором стоит.

Для пропускаодной итерации цикла (перехода к следующей итерации) используется команда продолженияcontinue:

public final int MIN=3;

public final int MAX=100;

for (int number = MIN; number <= MAX; number++)

{

if (number % 3 != 0)

continue; // следующая итерация цикла

System.out.printf(“\n%d”, number);

}

Эта программа осуществляет поиск всех чисел, кратныхтрем, от3до100.

Примеры:

1.Вычислить Sn– суммуn первых натуральных чисел

Алгоритм:Sn = 0

для i от 1 до n выполнять

Sn = Sn + i

Программа:

int n, sn=0;

String input;

input=JOptionPane.showInputDialog("До какого числа суммировать:");

n=Integer.parseInt(input);

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

sn+=i;

System.out.printf(“\nСумма чисел от 1 до %d равна %d ”, n, sn);