Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторная работа 5 Операторы цикла.doc
Скачиваний:
13
Добавлен:
14.08.2019
Размер:
92.67 Кб
Скачать
    1. Оператор цикла do while

Если условное выражение, управляющее циклом while, первоначально имеет значение false, то тело цикла не будет выпол­няться вообще. Однако иногда желательно выполнить тело while-цикла по крайней мере один раз, даже если условное выражение сначала имеет зна­чение false.

В Java имеется цикл do while, который делает именно это. Цикл do while всегда выполняет свое тело, по крайней мере один раз, потому что его ус­ловное выражение размещается в конце цикла. Общая форма цикла:

do {

statement; // тело цикла

} while (condition);

Каждая итерация цикла do while сначала выполняет тело цикла, а затем оценивает условное выражение. Если это выражение — true, цикл повто­рится. Иначе, цикл заканчивается. Как и у всех Java-циклов, condition должно быть булевским выражением.

Пример 7. В следующем фрагменте кода печатаются все целые числа от 0 до 9:

int count = 0;

do {

System.out.println(count);

count++;

} while(count < 10);

Контрольный вопрос 4. Написать фрагмент кода, выводящий на консоль четные числа от 2 до 100 с использованием цикла do-while:

Цикл do-while часто используют для получения ввода пользователя.

    1. Оператор цикла for

Общая форма оператора for:

for(initialization;condition;iteration) {

// тело цикла

}

Если повторяется только один оператор, фигурные скобки не нужны.

Цикл for работает следующим образом. В начале работы цикла выполняется выражение initialization. В общем случае это выражение устанавливает значение переменной управления циклом, которая действует как счетчик. Важ­но понять, что выражение инициализации выполняется только один раз. Затем оценивается condition. Оно должно быть булевским выражением и обычно сравнивает переменную управления циклом с некоторым гранич­ным значением. Если это выражение — true, то отрабатывают операторы из тела цикла, если — false, цикл заканчивается. Далее выполняется часть цикла iteration. Обычно это выражение, которое осуществляет инкрементные или декрементные операции с переменной управления циклом. Затем цикл реализовывает итерации. В каждом проходе цикла — сначала оценива­ется условное выражение, потом выполняется тело цикла и затем — выра­жение iteration. Этот процесс повторяется до тех пор, пока управляющее выражение не станет false.

Пример 8. В следующем фрагменте кода распечатываются целые числа 0…9

int count;

for(count = 0 ; count < 10 ; count++)

System.out.println(count);

Объявление переменных управления внутри цикла for

Часто переменная, которая управляет циклом for, необходима только для целей цикла и не используется в другом месте. Когда дело обстоит так, можно объявить переменную внутри инициализационной части for.

for(int count = 0 ; count < 10 ; count++)

System.out.println(count);

Когда переменная объявляется внутри заголовка for-цикла, важно помнить, что область ее действия заканчивается там же, где и у for-оператора (т. е. область действия переменной ограничена циклом for). Вне цикла for пере­менная прекратит существование.

Контрольный вопрос 5. Что напечатает следующая программа:

public class CountToTenError {

public static void main(String[] args) {

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

System.out.println(i);

System.out.println(“The final value of i is “ + i);

}

}

Синтаксис цикла for позволяет использовать несколько переменных при инициализации и итерации. Например:

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

sum += i * j;

Замечание. Выражения initialization,condition,iteration для цикла for являются вообще говоря не обязательными, например, допустим следующий оператор for(;;). Если condition пропущен, предполагается, что он имеет значение true.

Java допускает вложение циклов. То есть один цикл может быть внутри другого.

Пример 9.

int i, j;

for(i=0; i<10; i++) {

for(j=i; j<10; j++)

System.out.print(".”);

System.out.println();

}

}

Вывод этой программы:

..........

.........

........

.

Контрольный вопрос 5. Что делает следующий фрагмент кода.

int sum = 0;

for ( int number = 2; number <= 100; number += 2 )

sum += number;

System.out.println("The sum is " + sum);

Контрольный вопрос 6. Что напечатает следующая программа:

public class CountToTenErrorFixed {

public static void main(String[] args) {

int i;

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

System.out.println(i);

System.out.println(“The final value of i is “ + i);

}

}

Нигде не сказано, что итератор должен увеличиваться, он может и уменьшаться.

Контрольный вопрос 7. Что напечатает следующая программа:

public class CountDown {

public static void main(String[] args) {

for (int count = 10; count >= 1; count--) {

System.out.print(count+” “);

}

}

}

Контрольный вопрос 8. Будет ли работать следующий код ?

public class TerseCoder {

public static void main(String[] args) {

for (int i = 1; i <=10; System.out.println(i++));

}

}

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

Пример 10.

int a, b;

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

System.out.println(a + “ “ + b);

output:

1 10

2 9

3 8

4 7

5 6

6 5

7 4

8 3

9 2

10 1

Любопытно, что все три части цикла for необязательны.

Вложенные циклы.

Пример 11.

public class NestedLoop {

public static void main(String[] args) {

for(int x = 1; x < 10; x++) {

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

System.out.print(x + “-” + y + “ “);

System.out.println();

}

}

}

output:

1-1 1-2 1-3 1-4 1-5 1-6 1-7 1-8 1-9

2-1 2-2 2-3 2-4 2-5 2-6 2-7 2-8 2-9

3-1 3-2 3-3 3-4 3-5 3-6 3-7 3-8 3-9

4-1 4-2 4-3 4-4 4-5 4-6 4-7 4-8 4-9

5-1 5-2 5-3 5-4 5-5 5-6 5-7 5-8 5-9

6-1 6-2 6-3 6-4 6-5 6-6 6-7 6-8 6-9

7-1 7-2 7-3 7-4 7-5 7-6 7-7 7-8 7-9

8-1 8-2 8-3 8-4 8-5 8-6 8-7 8-8 8-9

9-1 9-2 9-3 9-4 9-5 9-6 9-7 9-8 9-9