Как работают циклы?

Рейтинг: 0Ответов: 1Опубликовано: 15.06.2023

Обучаюсь Java, но самая сложная тема для меня это циклы. При чем все. Сейчас уже начались массивы, а циклы все также не укладываются в голове. Нет понимания откуда берутся формулы и выходные значения. Вот например:

public class Main {
    public static void main(String[] args) {
        int list[] = {1, 2, 3, 4, 5, 6};
        for (int i = 1; i < list.length; i++)
            list[i] = list[i - 1];

        for (int i = 0; i < list.length; i++)
            System.out.print(list[i] + " ");

    }
}
  • Почему 1 1 1 1 1 1 получается?
  • Как расчет происходит?

Вложенные циклы еще сложнее: нет понимания в каком порядке срабатывают циклы или одновременно. Вот пример:

        int i, j;
        // отобразить верхнюю половину и центральный ряд
        for (i = 1; i <= 5; ++i) {
            for (j = 0; j < i; ++j)
                System.out.print("  " + j);
            System.out.println();
        }

 //отобразить нижнюю половину
        for (i = 5; i > 0; --i) {
            for (j = 0; j < i; ++j)
                System.out.print("  " + j);
            System.out.println();
        }

Заранее благодарю за ответы.

Ответы

▲ 2Принят

В первом цикле, вы наверное, хотите вычитать единицу из значения содержащегося в массиве. Но по факту вы каждому значению(начиная со второго т.е. 2) присваиваете значение предыдущего. i - в данном случае это не значение, а его индекс в массиве.

int list[] = {1, 2, 3, 4, 5, 6};
    for (int i = 1; i < list.length; i++)
        list[i] = list[i - 1];


i = 1 
list[i] = 2 

Индекс представляет номер элемента в массиве, при этом нумерация начинается с нуля, поэтому индекс первого элемента будет равен 0, индекс шестого элемента - 5.

i = 1
list[i] = list[i - 1];

Так как i = 1, вычитаем из него 1, получаем 0

Получается что list[1] = list[0] Приравниваем значение из первого индекса ко второму. В первом индексе у нас 1. При последующем переборе у вас происходит та же процедура, но в предыдущем значении уже 1 и она приравнивается всем индексам массива.

Если вы вынесете за скобки -1, т.е. list[i] = list[i] - 1 то тогда вы будете вычитать 1 из значения данного индекса.

Сам цикл for (int i = 1; i < list.length; i++) представляет довольно простое условие.

Первая часть объявления цикла - int i = 1 - создает и инициализирует переменную i.

Вторая часть - условие i < list.length. То есть пока переменная i меньше длины массива, будет выполняться цикл. length - общее число элементов во всех измерениях массива.

Третья часть - действия, выполняемые после завершения тела цикла - увеличение переменной i на единицу.

Вложенные циклы работают все по тому же принципу. Выполняется условие родительского цикла, потом происходит выполнение вложенного цикла от начала условия до его конца. После чего происходит проверка условия родительского цикла и так по кругу, пока условие родительского цикла не перестанет выполняться.

И да, совет про пошаговый разбор работы цикла на бумаге с карандашом это очень хороший совет, который применим не только к циклам, не оставьте его без внимания.