Одна из частых ошибок начинающих программистов — бесконечные циклы. Это ситуация, когда условие выхода из цикла никогда не становится истинным, и программа зависает или завершается с ошибкой переполнения памяти.
В этом уроке мы разберем причины возникновения таких ситуаций: забытое обновление счетчика, неправильное условие (например, i > 0, когда i растет) или намеренное использование while(true) без break. Вы научитесь визуально находить проблемы в коде, использовать интерактивные примеры для отладки и понимать, как работает код в критических ситуациях.
- Модуль 1: Первая программа и структура
- Модуль 2: Переменные и типы данных
- Объявление и инициализация переменных.
- Примитивы: целые числа (int, long, byte, short).
- Примитивы: дробные числа (double, float).
- Примитивы: логический тип (boolean).
- Примитивы: символьный тип (char).
- String — основы работы со строками.
- Приведение типов (Casting): расширение и сужение.
- Область видимости переменных (Scope).
- Модуль 3: Операторы
- Модуль 4: Управляющие конструкции
- Условный оператор if-else.
- Вложенные условия if.
- Конструкция switch-case.
- Цикл while.
- Цикл do-while.
- Цикл for (классический).
- Операторы break и continue.
- Бесконечные циклы (причины и решения).
- Модуль 5: Массивы и Строки (Advanced)
- Создание и заполнение массива.
- Доступ к элементам по индексу.
- Свойство length и перебор массива.
- Цикл for-each для массивов.
- Многомерные массивы.
- Методы String: length, charAt, isEmpty.
- Манипуляции: substring, concat, replace.
- Сравнение строк: equals vs ==.
- Разделение строк (split) и trim.
- StringBuilder (изменяемые строки).
- Модуль 6: Методы
- Модуль 7: Классы и Объекты (ООП Часть 1)
- Модуль 8: Капсуляция и Модификаторы
- Модуль 9: Наследование и Полиморфизм (ООП Часть 2)
- Модуль 10: Обработка исключений
- Модуль 11: Коллекции и Дженерики
- Модуль 12: Функциональный стиль (Java 8+)
- Модуль 13: Полезные стандарты
1. Конечный или бесконечный
Перед вами четыре фрагмента кода с циклами на Java. Ваша задача — определить, является ли каждый цикл бесконечным или он завершится корректно. Перетащите каждый элемент в соответствующую категорию: 'Завершится корректно' или 'Бесконечный цикл'. Обратите внимание, что бесконечный цикл возникает, когда условие выхода никогда не выполняется или отсутствует, тогда как завершающийся цикл имеет чёткое условие, которое в определённый момент становится ложным.
while (true) {
System.out.println("Running");
}for (int i = 0; i < 5; i++) {
System.out.println(i);
}int j = 0;
while (j < 3) {
j++;
System.out.println(j);
}for (;;) {
System.out.println("Infinite");
}2. Забытый инкремент
В этом фрагменте кода Java используется цикл while для вывода чисел от 1 до 5, но в теле цикла отсутствует изменение переменной-счётчика, что приводит к бесконечному выполнению. Найдите строку, в которой необходимо добавить инкремент переменной, чтобы цикл завершился после пяти итераций.
public class Main { public static void main(String[] args) { int i = 1; while (i <= 5) { System.out.println("i = " + i); } }}3. Исправление условия
В данном фрагменте кода цикл for должен выводить числа от 0 до 9. Однако из-за неверного оператора сравнения в условии цикл не выполняется. Замените оператор сравнения на корректный, чтобы цикл выполнился ровно 10 раз и вывел все числа от 0 до 9. Вставьте правильный оператор в отмеченное место.
// Выведите числа от 0 до 9
for (int i = 0; i input1S 10; i++) {
System.out.println(i);
}4. Причина зацикливания
Перед вами фрагмент кода на Java, содержащий цикл while. Внимательно изучите условие цикла и операцию изменения переменной-счётчика. Ваша задача — найти и выделить кликом ту часть выражения в условии цикла, которая всегда остаётся истинной (true) и приводит к бесконечному выполнению цикла. Не отмечайте другие части кода, такие как объявление переменной, тело цикла или оператор инкремента.
int i = 0;
while ({{i >= 0~|~t1}}) {
System.out.println("Итерация: " + i);
{{i++~|~t2}};
}5. Хитрый цикл
Проанализируйте приведённый код на Java. Цикл do-while выглядит бесконечным, но внутри есть условие выхода с помощью break. Определите, какое число будет выведено на экран после выполнения программы.
class Main {
public static void main(String[] args) {
int i = 0;
do {
i += 2;
if (i >= 5) {
break;
}
} while (true);
System.out.println(i);
}
}6. Безопасный цикл
Из предложенных строк соберите корректную Java-программу, которая использует цикл while для чтения ввода с консоли и гарантированно завершается при вводе слова 'exit'. Программа должна корректно обрабатывать ввод и прерывать цикл при вводе 'exit'. Некоторые строки лишние и не должны входить в решение.
import java.util.Scanner;public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); while (true) { String input = scanner.nextLine(); if (input.equals("exit")) { break; } } scanner.close(); }} continue; while (!input.equals("exit")) { if (input == "exit") { System.out.println(input);