Метод 1
Обратите внимание, что если мы обозначим текущий номер строки как «строку», начиная с 0, а общее количество строк как «n»,
Количество звезд в каждой строке = 2 * строка + 1
Количество начальных (или конечных) пробелов в каждой строке = n - строка - 1
Мы можем просто сгенерировать пирамиду, используя это правило:
int n = 4;
for (int line = 0; line < n; line++) {
StringBuilder sb = new StringBuilder();
int starsToAppend = 2 * line + 1;
int spaceToAppend = n - line - 1;
while (spaceToAppend-- > 0) sb.append(" ");
while (starsToAppend-- > 0) sb.append("*");
System.out.println(sb.toString());
}
Метод 2
Вы также можете подходить с середины и расширяться. Обратите внимание, что в центре есть постоянный столбец звезды (*), и с каждой стороны в каждую строку добавляется только одна звезда. А остальные пробелы.
int n = 4;
for(int line=0; line <n ; line++){
StringBuilder sb = new StringBuilder("*");
int spacesToAppendOnBothSides = n-line-1;
int starsToAppendOnBothSides = line;
for(int idx=0; idx<starsToAppendOnBothSides; idx++){
sb.insert(0, "*"); //appends to the beginning
sb.append("*"); //appends to the end
}
for(int idx=0; idx<spacesToAppendOnBothSides; idx++){
sb.insert(0, " ");
sb.append(" "); //NOTE: You may exclude this line to avoid adding trailing spaces
}
System.out.println(sb.toString());
}
Объяснение: На первой итерации (строка == 0) 1. Возьмем одну звезду,
*
и добавьте ноль лишних звездочек (поскольку наша строка # равна нулю) с обеих сторон, что дает нам (та же строка):
*
А затем добавьте n-строку-1 (мы вычтем 1, потому что мы уже добавили 1 символ - первую звезду) = 3 пробела с каждой стороны этой звезды, что дает нам:
. .. * ...
На 2-й итерации (строка == 1), если мы применяем ту же логику: 1.
*
2.
***
^ This middle one is the first star
3.
..***..
Довольно просто, когда вы понимаете логику. Есть несколько способов сделать это, но они являются одними из самых простых:)