Создание диагональной матрицы N на N с использованием базовой логики
Я хочу создать матрицу размера N на N, где N - значение константы, определенное глобально, на данный момент я просто хочу создать матрицу, где N = 6. Там, где я отстаю, я хочу сделать это по диагонали, например:
0 1 2 3 4 5
1 0 1 2 3 4
2 1 0 1 2 3
3 2 1 0 1 2
4 3 2 1 0 1
5 4 3 2 1 0
В настоящее время у меня есть этот метод:
public static void drawMatrix(){
for (int line = 0; line < N; line++){
for (int j = 0; j < N; j++){
System.out.print(j + " ");
}
System.out.println();
}
}
К сожалению, он способен печатать только 0 1 2 3 4 5 в каждой строке, поэтому я полагаю, что мне нужен еще один вложенный for-loop, однако я не уверен, как его настроить.
Ответы
Ответ 1
j
- номер столбца, поэтому он будет одинаковым для всех строк. Вам нужно добавить или вычесть j
из номера строки, в зависимости от номера строки, чтобы сделать "сдвиг". Поскольку результат может стать отрицательным, вам нужно добавить N
и mod N
:
if (j > line) {
System.out.print((N-line+j)%N + " ");
} else {
System.out.print((line-j+N)%N + " ");
}
Демоверсия
Вы также можете переписать его без if
с использованием условного выражения:
int sign = j > line ? -1 : 1;
System.out.print((N+sign*(line-j))%N + " ");
Демоверсия
Ответ 2
Небольшое изменение в работе вашего кода
public static void drawMatrix() {
for(int line = 0; line < N; line++) {
for(int j = 0; j < N; j++) {
System.out.print(Math.abs(line - j) + " ");
}
System.out.println();
}
}
Ответ 3
Я бы сделал что-то вроде:
int n=6;
for(int row=0;row<n;row++)
{
for(int col = 0;col<n;col++)
{
System.out.print(abs(col-row) +" ");
}
System.out.println();
}
Предполагая, что вы можете использовать abs().
Я надеялся, что это поможет вашей цели.
Ответ 4
Это также работает:
public static void main(String[] args) {
int N = 6;
int column = 0;
for (int row = 0; row < N; row++) {
for (column = row; column >= 0; column--) //prints till row number reaches 0
System.out.print(column + " ");
for (column = 1; column < N - row; column++)//from 1 to N-row
System.out.print(column + " ");
System.out.println();
}
}