Вы должны сосредоточиться на одной строке за раз, а затем вычислить математику, необходимую для получения цикла
Например, первая строка
X X
Может быть выражена вызовами метода (не волнуйтесь, если вы не изучили методы, это только скрывает логику циклов)
printSpaces(0); printX(); printSpaces(6); printX(); printSpaces(0);
Затем, следующая строка, вызовы одного и того же метода, только разные числа
printSpaces(1); printX(); printSpaces(4); printX(); printSpaces(1);
Теперь вы можете начать замечать, что внешние пробелы увеличиваются на 1 каждый раз, а внутренние пробелы уменьшаются на 2.
Внутренние пробелы будут уменьшаться на два, пока не достигнет нуля, но вместо записиобратный цикл, вы можете фактически выразить это математически в терминах увеличения количества внешних пространств, 2 X и ширины нарисованного X.
inner_space = (num * 2) - 2 - (outer_spaces * 2)
Для показанных примеров
inner_space = (4 * 2) - 2 - (0 * 2) = 6
inner_space = (4 * 2) - 2 - (1 * 2) = 4
Следовательно, вы бы написали верхний цикл, например
int num = 4;
// loop 0..3
for (int outerSpace = 0; outerSpace < num; outerSpace++) {
int innerSpaces = (num * 2) - 2 - (outerSpace * 2);
// printSpaces(outerSpace);
printX();
// printSpaces(innerSpaces);
printX();
// printSpaces(outerSpace);
}
Теперь, используете ли вы методы или циклы, это деталь реализации, но это псевдокод для получения вершины X