Треугольник с помощью цикла do-while
Нужно решить задачу, нарисовать треугольник из долларов, есть условия:
- Цикл только do while.
- Не более двух циклов.
У меня получается пока только нижняя часть рисунка, и через while:
int n = 3;
int i = n, j = 1;
while (i >= 1) {
while (j <= i) {
System.out.print(" " + "#");
j++;
}
System.out.println("");
j = 1;
i--;
}
Ответы (1 шт):
Автор решения: Nowhere Man
→ Ссылка
Если используется отдельный цикл для поэлементного вывода каждой строки, как в представленном решении, то придётся завести ещё несколько переменных:
- общее количество строк будет вычисляться по формуле
m = 2 * n - 1 - текущая "ширина" строки, которая может как увеличиваться, так и уменьшаться
- соответственно, "приращение ширины", которое может принимать значения
1,-1Получится что-то вроде:
int
n = 3, // "высота" треугольника (максимальная ширина)
m = 2 * n - 1, // общее количество строк
i = 1, // счётчик строк (от 1)
d = 1, // "приращение"
w = 1; // ширина строки
do {
int j = 0; // счётчик элементов текущей строки
do {
System.out.print("$");
} while (++j < w);
System.out.println();
// достигли максимальной ширины, начинаем уменьшать текущую ширину
if (i == n) d = -1;
w += d;
} while (++i <= m);
Если можно использовать метод для генерации строк String::repeat, добавленный в Java 11, то можно будет обойтись технически одним циклом, определив отдельный метод:
public static void printTriangleOneLoop(int n, String str) {
int i = 0, d = 1, w = 1, m = 2 * n - 1;
do {
System.out.println(str.repeat(w)); // вывод строки с текущей шириной
if (++i == n) d = -1; // достигли максимума
w += d;
} while (i < m);
}
Или же можно использовать последовательно два цикла без дополнительных переменных и логики, в первом ширина будет увеличиваться, во втором, соответственно, уменьшаться:
public static void printTriangleTwoLoops(int n, String str) {
int i = 0;
do {
System.out.println(str.repeat(++i));
} while (i < n);
do {
System.out.println(str.repeat(--i));
} while (i > 1);
}
