Операторы цикла
Лабораторная работа №5. Операторы цикла и перехода
Необходимые сведения из теории.
Операторы цикла
Операторы цикла Java — это for, while и do while. Цикл повторно выполняет один и тот же набор команд, пока не выполнится условие завершения.
1.1 Оператор цикла while
Цикл while —повторяет оператор или блок операторов, пока его управляющее выражение имеет значение true. Вот его общая форма:
while(condition) { statement ; // тело цикла }
Здесь condition может быть любым булевским выражением. Тело цикла будет выполняться до тех пор, пока условное выражение имеет значение true. Когда condition становится false, управление передается строке программы, следующей непосредственно за циклом. Фигурные скобки не нужны, если повторяется одиночный оператор.
Пример 1. Вычисление 10!
int i=2, s=1; while(i <= 10) { s = s * i;i++; }
Контрольный вопрос 1. Что делает следующий кусок кода?
int x=10; int s=1; while(x > 1) { s = s * x;x = x - 1; }
Так как цикл while оценивает условное выражение в самом начале своей работы, тело цикла не будет выполняться ни одного раза, если условие сразу же имеет значение false.
Пример 2. В следующем фрагменте обращение к println () никогда не выполняется:
int а = 10, b = 20; while(а > Ь){ System.out.printin("Эта строка никогда не выведется"); }
Пример 3. В следующем фрагменте получим бесконечный цикл:
int number = 2; while (true) { System.out.print(number + “ “); number += 2; //number = number + 2 }
Пример 4. В следующем куске кода выводятся на консоль четные числа от 2 до 20: 2 4 6 8 10 …20
int number = 2; while (number <= 20) { System.out.print(number + “ “); number += 2; } Контрольный вопрос 2. Написать фрагмент кода, в котором находится сумма всех четных чисел меньших или равных 100.
Тело цикла while (или любого другого цикла Java) может быть пустым. Это потому, что в Java синтаксически допустим пустой (null) оператор (который состоит только из точки с запятой).
Пример 5. Рассмотрим следующую программу:
int i=100, j=200; while(++i < --j); // в этом цикле нет тела System.out.printin("i равно " + i);
Контрольный вопрос 3. Какой вывод генерирует программа из примера 5.
Пример 6. В следующей программе вычисляется сумма целых чисел вводимых пользователем с клавиатуры. Выход из программы происходит, как только пользователь введет не целое число.
import java.util.Scanner; public class While {
public static void main(String args[]) { int sum = 0; Scanner input=new Scanner(System.in); System.out.println("Enter an integer");
while (input.hasNextInt()) { sum += input.nextInt(); System.out.println("Enter next integer"); }
System.out.println("sum=" +sum); } } 1.2. Оператор цикла 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.3. Оператор цикла 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 необязательны.
|