Вывести крест из Х
Нужна помощь. Есть задачка:
Создать двумерный массив строк. При его распечатке в консоли должен выводиться крестик из X:
x x
x x
x x
x
x x
x x
x x
Вот мое решение
public class Main {
public static void main(String[] args) {
String[][] cross = new String[3][3];
for(int i = 0; i < cross.length; i++){
for (int j = 0; j < cross[i].length; j++) {
if (i == cross.length - 1 || i == j + 1)
cross[i][j] = "x";
if (j == i || j == cross.length - 1 - i) {
cross[i][j] = "x";
}
System.out.println(cross[i][j]);
}
}
}
}
Не могу разобраться со свойством диагоналей, которое будет задавать крест.
Ответы (3 шт):
Автор решения: MBo
→ Ссылка
Второй иф же правильный
if (j == i || j == cross.length - 1 - i) {
cross[i][j] = "x";
Только, вероятно, в случае невыполнения условия нужно назначить пробел
}
else {
cross[i][j] = " ";
}
Автор решения: roddar92
→ Ссылка
Для определения креста будет достаточно второго условия, которое есть в вашем примере. И, конечно, стоит не забывать выводить новую строку после каждой вложенной итерации. :)
public class Main {
public static void main(String[] args) {
String[][] cross = new String[5][5];
for(int i = 0; i < cross.length; i++){
for (int j = 0; j < cross[i].length; j++) {
cross[i][j] = (j == i || j == cross.length - 1 - i) ? "x" : " ";
System.out.print(cross[i][j]);
}
System.out.println();
}
}
}
Автор решения: user
→ Ссылка
Можно одним циклом массив заполнить, или одним Stream:
int d = 5;
String[][] arr = new String[d][d];
IntStream.range(0, d * 10 + d - 10)
.filter(i -> i % 10 < d)
.forEach(i -> {
if (i / 10 == i % 10 || i / 10 + i % 10 == d - 1)
arr[i / 10][i % 10] = "X";
else
arr[i / 10][i % 10] = " ";
});
Arrays.stream(arr).map(Arrays::toString).forEach(System.out::println);
// [X, , , , X]
// [ , X, , X, ]
// [ , , X, , ]
// [ , X, , X, ]
// [X, , , , X]