Циклы
Еще одним видом управляющих конструкций являются циклы. Циклы позволяют в зависимости от условий выполнять определенное действие или последовательность действий множество раз. В языке Java есть следующие виды циклов:
for
while
do...while

Цикл for
Цикл for имеет следующее формальное определение:
for ([инициализация счетчика]; [условие]; [изменение счетчика])
{
//тело цикла
}
Рассмотрим цикл for на примере, вывода в консоль квадратов чисел от 0 до 9:
for (int i = 1; i < 9; i++){
System.out.println(i * i);
}
Первая часть объявления цикла int i = 1 создает и инициализирует счетчик i. Счетчик необязательно должен представлять тип int. Это может быть и любой другой числовой тип, например, float. Перед выполнением цикла значение счетчика будет равно 1. В данном случае это то же самое, что и объявление переменной.
Вторая часть - условие, при котором будет выполняться цикл. В данном случае цикл будет выполняться, пока i не достигнет 9.
И третья часть - приращение счетчика на единицу. Опять же нам необязательно увеличивать на единицу. Можно уменьшать: i--.
В итоге блок цикла сработает 8 раз, пока значение i не станет равным 9. И каждый раз это значение будет увеличиваться на 1.
Нам необязательно указывать все условия при объявлении цикла. Например, мы можем написать так:
int i = 1;
for (; ;){
System.out.println(i * i);
i++; //Теперь нет инициализированной переменной-счетчика, нет условия, поэтому цикл будет работать вечно - бесконечный цикл
}
Цикл do
Формальное определение:
do {
//тело цикла
} while([условие]);
Цикл do сначала выполняет код тела цикла, а потом проверяет условие в инструкции while. И пока это условие истинно, цикл повторяется. Например:
int j = 7;
do{
System.out.println(j);
j--;
}
while (j > 0);
В данном случае код цикла сработает 7 раз, пока j не окажется равным нулю. Важно отметить, что цикл do гарантирует хотя бы однократное выполнение действий, даже если условие в инструкции while не будет истинно. Если написать:
int j = -1;
do{
System.out.println(j);
j--;
}
while (j > 0);
Хотя переменная j изначально меньше 0, цикл все равно один раз выполнится
Цикл while
Формальное определение:
while([условие]) {
//тело цикла
}
Цикл while сразу проверяет истинность некоторого условия, и если условие истинно, то код цикла выполняется:
int j = 6;
while (j > 0){
System.out.println(j);
j--;
}
Получим вывод на экран чисел от 6 до 0(6, 5, 4, 3, 2, 1)
Операторы continue и break
Оператор break позволяет выйти из цикла в любой его момент, даже если цикл не закончил свою работу:
for (int i = 0; i < 10; i++){
if (i == 5)
break;
System.out.println(i);
}
Когда счетчик станет равным 5, сработает оператор break, и цикл завершится.
Теперь сделаем так, чтобы если число равно 5, цикл не завершался, а просто переходил к следующей итерации. Для этого используем continue:
for (int i = 0; i < 10; i++){
if (i == 5)
continue;
System.out.println(i);
}
В этом случае, когда выполнение цикла дойдет до числа 5, программа просто пропустит это число и перейдет к следующему
Приложение
Break:
import java.util.Scanner;
public class Main {
public static void main(String[] args){
//Задание 1. Вводим цилочисленное а. Вычитая 2 из значения переменной а,
// выводим рез-тат на экран до тех пор, пока а > 0. Но если значение а = 25,
//то продолжать движение к 0 не нужно.
Scanner in = new Scanner(System.in);
//вводим а
int a = in.nextInt();
while ( a > 0 ){
a -= 2; // a = a - 2;
System.out.println( a );
if ( a == 25 ) {
break;
}
}
}
}
Continue:
import java.util.Scanner;
public class Main {
public static void main(String[] args){
//Задание 1. Вводим цилочисленное а. Вычитая 1 из значения переменной а,
// выводим рез-тат на экран только в случае, если значение четное.
Scanner in = new Scanner(System.in);
//вводим а
int a = in.nextInt();
while ( a > 0 ){
a--;
if ( a % 2 != 0){
continue;
}
System.out.println( a );
}
}
}
Do/while:
import java.util.Scanner;
public class Main {
public static void main(String[] args){
Scanner in = new Scanner(System.in);
int a = in.nextInt();
//цикл do ... while(). !!! Выполняется МИНИМУМ 1 раз
do {
System.out.println( a );
a--;
}while ( a > 0);
}
}
For:
import java.util.Scanner;
public class Main {
public static void main(String[] args){
//Задача 2. Вывести все числа от 0 до значения переменной а.
Scanner in = new Scanner(System.in);
int a = in.nextInt();
//цикл for. for(нач. значение; условие; шаг){}
for ( int i = 0; i < a; i++ ){
System.out.println( i );
}
}
}
While:
import java.util.Scanner;
public class Main {
public static void main(String[] args){
Scanner in = new Scanner(System.in);
int a = in.nextInt();
while ( a > 0 ){
System.out.println( "Александр" );
a--; // a = a - 1;
}
}
}