Как переписать цикл for на while и do-while в Java?

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

Решал задачи по выведению фигур в консоль и столкнулся с такой проблемой, что не получается переделать цикл 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 не получается.

Ответы

▲ 1Принят

В примере с 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);
▲ 1

Забыты мелочи...

 int i = 0;
 while (i < 7) {
    int j = 0;
    while (j < i + 1) {
        System.out.print("%");
        j++;
    }
    System.out.println();
    i++;
}