Самое простое решение - вставить две петли: сначала выведите O
, а затем используйте l oop для печати .
. Вы знаете, что каждая строка должна иметь уменьшающееся число O
(и увеличивающееся число .
с). Фактически, у вас есть 5 - i
и i
каждого на строку (где i
- номер строки). И вы можете использовать внешний l oop, чтобы определить, сколько из каждого следует нарисовать с этими формулами. Например,
int size = 5;
for (int i = 0; i < size; i++) {
for (int j = 0; j < size - i; j++) {
System.out.print("O ");
}
for (int j = 0; j < i; j++) {
System.out.print(". ");
}
System.out.println();
}
Какие выходы (в соответствии с запросом)
O O O O O
O O O O .
O O O . .
O O . . .
O . . . .
Другой вариант - создать StringBuilder
для представления начальных условий, распечатать и затем преобразовать StringBuilder
, Это использует дополнительное хранилище, но устраняет необходимость во вложенных циклах.
int size = 5;
StringBuilder sb = new StringBuilder();
for (int i = 0; i < size; i++) {
sb.append("O ");
}
for (int i = 0; i < size; i++) {
System.out.println(sb);
sb.setCharAt(sb.length() - (i * 2) - 2, '.');
}
И вы также можете сделать это с массивом boolean
(s) (например, битовой маской). Преобразуйте false
в O
и true
в .
и установите смещение последнего элемента по индексу на true
на каждой итерации. Мол,
int size = 5;
boolean[] arr = new boolean[size];
for (int i = 0; i < size; i++) {
for (int j = 0; j < size; j++) {
System.out.print(arr[j] ? ". " : "O ");
}
System.out.println();
arr[size - i - 1] = true;
}