05 - Циклы управляющего потока
Узнайте, как эффективно зацикливать ваш код с помощью операторов в Java
Циклы позволяют повторять код, не переписывая его снова и снова. Они необходимы для обработки коллекций, генерации миров и обновления игровых объектов.
Цикл While
Повторяет код до тех пока условие верно:
int countdown = 5;
while (countdown > 0) {
System.out.println(countdown);
countdown--;
}
System.out.println("Запускайте Квебеков!");Структура
while (condition) {
// код, который нужно зациклить
}Убедитесь, что условие цикла невыполнимо иначе он, в один момент, может прерваться!
int x = 0;
while (x < 10) {
System.out.println("Nah, I'd win.");
// Забыл увеличить значение x! Условие цикла не выполнилось, а значит код будет бесконечно выводить "Nah, I'd win."
}Цикл Do-While
Работает так же, как и while, но всегда выполняется как минимум один раз:
int health = 0;
do {
System.out.println("Попытка поймать Квебека...");
health = 100;
} while (health <= 0);Цикл for
Лучше всего подходит для случаев, когда вы имеете представление о том, сколько раз должен повторяться цикл:
for (int i = 1; i <= 5; i++) {
System.out.println("Level " + i);
}Структура
for (initialization; condition; update) {
// Тут должен быть код, который нужно зациклить
}for (int i = 0; i < 10; i++) {
// ^ ^ ^
// Старт Стоп Шаг
}- Инициализация: int i = 0 - Выполняется один раз в начале
- Условие: i < 10 - Проверяется перед каждым запуском цикла
- Шаг: i++ - Действие, которое происходит в конце цикла, в данном случае он увеличивает значение i
Опреатор Break
Вы можете остановить цикл в любой момент его выполения с помощью break:
for (int i = 1; i <= 10; i++) {
if (i == 6) {
break; // Цикл останавливается, когда i достигает значения 6, то есть условие цикла тут не причём
}
System.out.println(i);
}Оператор Continue
Позволяет "пропустить" опеределенные значения двигаясь к следующей итерации:
for (int i = 1; i <= 10; i++) {
if (i % 2 == 0) {
continue; // Пропускает чётные числа (то есть код проверяет, делится ли число на 2 без остатка и если это условие выполняется переходит к следующему значению пропуская нынешнее)
}
System.out.println(i); // Выводит только нечётные числаВложенные Циклы
Вы можете вложить один цикл внутрь другого:
for (int i = 1; i <= 3; i++) {
for (int j = 1; j <= 2; j++) {
System.out.println("i: " + i + ", j: " + j);
}
}Будьте осторожны с вложенными циклами! Они могут существенно замедлить работу вашего мода.
// Этот код выполняется 1,000,00 раз!
for (int i = 0; i < 1000; i++) {
for (int j = 0; j < 1000; j++) {
// Тут мог бы быть ваш код
}
}Старайтесь избегать глубоко вложенных циклов (многократно вложенных циклов) при обработке большого количества данных.