使用基本逻辑创建N×N对角矩阵

Und*_*ish 10 java for-loop matrix

我想创建一个大小为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
Run Code Online (Sandbox Code Playgroud)

目前我有这个方法:

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();
    }
}
Run Code Online (Sandbox Code Playgroud)

不幸的是它只能在每一行打印0 1 2 3 4 5,所以我想我需要另一个嵌套的for循环,但是我不知道如何设置它.

das*_*ght 10

j是列号,因此对于所有行都是相同的.您需要做的是j根据行号添加或减去行号,以便进行"转移".由于结果可能变为负值,你将需要添加N和国防部通过N:

if (j > line) {
    System.out.print((N-line+j)%N + " ");
} else {
    System.out.print((line-j+N)%N + " ");
}
Run Code Online (Sandbox Code Playgroud)

演示.

您也可以在不if使用条件表达式的情况下重写它:

int sign = j > line ? -1 : 1;
System.out.print((N+sign*(line-j))%N + " ");
Run Code Online (Sandbox Code Playgroud)

演示.


小智 6

您的代码稍有变化

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();
    }
}
Run Code Online (Sandbox Code Playgroud)