for (инициализация; условие; шаг) {
// тело
}
// Считаем от 0 до 4
for (int i = 0; i < 5; i++) {
System.out.println(i);
}
// Вывод: 0 1 2 3 4
// Считаем от 10 до 1
for (int i = 10; i >= 1; i--) {
System.out.println(i);
}
// Шаг 2
for (int i = 0; i <= 10; i += 2) {
System.out.println(i); // 0 2 4 6 8 10
}
while (условие) {
// тело — выполняется ПОКА условие true
}
int n = 1;
while (n <= 5) {
System.out.println(n);
n++;
}
// Вывод: 1 2 3 4 5
// Если условие сразу false — тело не выполнится ни разу
int x = 10;
while (x < 0) {
System.out.println("не выполнится");
}
do {
// тело
} while (условие);
int n = 1;
do {
System.out.println(n);
n++;
} while (n <= 5);
// Вывод: 1 2 3 4 5
// Даже если условие false с начала:
int x = 100;
do {
System.out.println("выполнится один раз");
} while (x < 0);
for (тип элемент : коллекция) {
// тело
}
int[] numbers = {10, 20, 30, 40};
for (int num : numbers) {
System.out.println(num);
}
// Вывод: 10 20 30 40
String[] fruits = {"яблоко", "груша", "слива"};
for (String fruit : fruits) {
System.out.println(fruit);
}
Ограничения for-each:
- Нет доступа к индексу
- Нельзя изменять элементы массива примитивов
for (int i = 0; i < 10; i++) {
if (i == 5) {
break; // выходим при i=5
}
System.out.println(i);
}
// Вывод: 0 1 2 3 4
// Поиск первого четного
int[] arr = {3, 7, 4, 9, 2};
int found = -1;
for (int x : arr) {
if (x % 2 == 0) {
found = x;
break; // нашли, выходим
}
}
System.out.println(found); // 4
for (int i = 0; i < 10; i++) {
if (i % 2 == 0) {
continue; // пропускаем чётные
}
System.out.println(i);
}
// Вывод: 1 3 5 7 9
// Таблица умножения
for (int i = 1; i <= 3; i++) {
for (int j = 1; j <= 3; j++) {
System.out.print(i * j + " ");
}
System.out.println();
}
// 1 2 3
// 2 4 6
// 3 6 9
// Перебор 2D массива
int[][] matrix = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
for (int i = 0; i < matrix.length; i++) {
for (int j = 0; j < matrix[i].length; j++) {
System.out.print(matrix[i][j] + " ");
}
System.out.println();
}
// Выход из внешнего цикла
outer:
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 5; j++) {
if (i == 2 && j == 2) {
break outer; // выходим ИЗ ОБОИХ
}
System.out.print(i + "" + j + " ");
}
}
// Остановится как только i=2, j=2
int[] arr = {1, 2, 3, 4, 5};
int sum = 0;
for (int x : arr) {
sum += x;
}
System.out.println(sum); // 15
int[] arr = {3, 7, 1, 9, 4};
int max = arr[0];
for (int x : arr) {
if (x > max) max = x;
}
System.out.println(max); // 9
int[] arr = {1, 2, 3, 4, 5, 6};
int count = 0;
for (int x : arr) {
if (x % 2 == 0) count++;
}
System.out.println(count); // 3 (чётных)
int[] arr = {5, 3, 8, 1};
int target = 8;
int index = -1;
for (int i = 0; i < arr.length; i++) {
if (arr[i] == target) {
index = i;
break;
}
}
// index = 2
int[] arr = {1, 2, 3, 4, 5};
for (int i = 0; i < arr.length / 2; i++) {
int tmp = arr[i];
arr[i] = arr[arr.length - 1 - i];
arr[arr.length - 1 - i] = tmp;
}
// {5, 4, 3, 2, 1}
for — известно кол-во итераций
while — условие проверяется до входа
do-while — гарантирован 1 запуск
for-each — для массивов и коллекций, нет индекса