Как переписать цикл for на while и do-while в Java?
Решал задачи по выведению фигур в консоль и столкнулся с такой проблемой, что не получается переделать цикл for на цикл while и do-while. Хотя с виду они одинаковые, помогите понять что не так, и как, в целом, лучше понимать циклы и алгоритмические задачи.
Вот пример с for:
for (int i = 0; i < 7; i++) {
for (int j = 0; j < i + 1; j++) {
System.out.print("%");
}
System.out.println();
}
А вот пример с while:
while (i < 7) {
while (j < i + 1) {
System.out.print("%");
j++;
}
System.out.println();
i++;
}
По идее они должны выводить одинаковую фигуру, но в примере с while не получается.
Ответы (2 шт):
Забыты мелочи...
int i = 0;
while (i < 7) {
int j = 0;
while (j < i + 1) {
System.out.print("%");
j++;
}
System.out.println();
i++;
}
В примере с while нужно было инициализировать j внутри цикла, а также можно было бы использовать пост-инкременты внутри самого оператора while:
int i = 0;
while (i++ < 7) {
int j = 0;
while (j++ < i) {
System.out.print("%");
}
System.out.println();
}
Для оператора do-while начальное значение изменится на 1, так как в таком случае тело обоих циклов будет выполняться как минимум один раз:
i = 1;
do {
int j = 1;
do {
System.out.print("%");
} while (j++ < i);
System.out.println();
} while (i++ < 7);
Также хотел бы обратить внимание на существование метода String::repeat начиная с JDK 11 (сентябрь 2018), с использованием которого код заметно упростится благодаря устранению вложенных циклов:
i = 0;
while (i++ < 7) {
System.out.println("%".repeat(i));
}
i = 0;
while (i < 7) {
System.out.println("%".repeat(++i));
}
i = 0;
do {
System.out.println("%".repeat(++i));
} while (i < 7);