String s = "8";
for (int i = 0; i < 10; i++){
System.out.print(s);
for (int j = 10-i; j < 10; j++){
System.out.print(s);
}
System.out.println("");
}
Иван
38 уровень
Помогите разобраться как это работает? Не пойму что в циклах происходит :(
Решен
Комментарии (4)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Павел Безумный учёный Expert
7 марта 2020, 15:21
1. Начинается 1 итерация внешнего цикла, т. е. кода в его теле.
2. Начинается выполнение внутреннего цикла. Этот цикл выводит в консоль символ 8. Поскольку используется метод print( ), то после вывода символа строка не завершается, и следующий символ 8 будет выведен в эту же строку. Так происходит определённое количество раз, пока цикл не отработает полностью. В результате мы получаем строку из нескольких символов 8.
3. После выполнения внутреннего цикла продолжается выполнение кода в теле внешнего цикла. Это команда System.out.println( ), при помощи которой строка с восьмёрками завершается, т. е. последующий символ будет выводиться с новой строки.
4. Завершается 1 итерация внешнего цикла, начинается вторая.
Затем происходит повторение действий, описанных в п. 1 ... 4.
Количество итераций внешнего цикла задаётся фиксировано int i = 0; i < 10; (по количеству строк).
Количество итераций внутреннего цикла задаётся в зависимости от номера происходящей в данный момент итерации внешнего цикла int j = 10 - i; j <= 10;, т. е. если набирается 3 строка (i = 2), то в неё будет выведено 3 символа (j = 10 - 2).
+4
Иван
7 марта 2020, 15:53
Все понятно до последнего момента. Почему так: "т. е. если набирается 3 строка (i = 2), то в неё будет выведено 3 символа (j = 10 - 2)."? Получается если "j = 10 - 2" == 8, то должно выводится 8 восьмерок и так далее до 0. И треугольник должен получится перевернутым в обратную сторону. А происходит все наоборот.
+2
Павел Безумный учёный Expert
7 марта 2020, 23:12
Обратите внимание на условие завершения внутреннего цикла: j <= 10. То есть, когда значение j превысит 10, цикл завершится. Но мы изначально задаём переменной j значение, зависящее от переменной внешнего цикла i (для третьей строки j = 10 - 2, т. е. 8). Таким образом внешний цикл начинает считать итерации не от 0, а от 8, а значит, до завершения ему остаётся сделать всего три итерации (j = 8, j = 9 и j = 10).
Тот же вывод можно получить, если несколько изменить внутренний цикл:
Теперь счёт во внутреннем цикле начинается от 0, но количество итераций до его завершения определяется переменной i. +3
Иван
8 марта 2020, 10:34
Большое спасибо! Разобрался теперь).
+1