Моддинг Hytale
Основы Java

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
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++) {
        // Тут мог бы быть ваш код
    }
}

Старайтесь избегать глубоко вложенных циклов (многократно вложенных циклов) при обработке большого количества данных.