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

时间:2016-09-07 11:04:13

标签: 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

目前我有这种方法:

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循环,但是我不知道如何设置它。

4 个答案:

答案 0 :(得分:10)

j是列号,因此对于所有行都是相同的。您需要做的是在行号中添加或减去N,具体取决于行号,以便进行“转移”。由于结果可能会变为负数,因此您需要按N添加if (j > line) { System.out.print((N-line+j)%N + " "); } else { System.out.print((line-j+N)%N + " "); } mod

if

Demo.

您也可以使用条件表达式在没有int sign = j > line ? -1 : 1; System.out.print((N+sign*(line-j))%N + " "); 的情况下重写它:

{{1}}

Demo.

答案 1 :(得分: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();
    }
}

答案 2 :(得分:1)

我会做类似的事情:

 imgDecodableString = "/storage/emulated/0/DCIM/Camera/IMG_20160114_141351594.jpg"

 Bitmap decodedBitmap = BitmapFactory.decodeFile(imgDecodableString);
 Log.d(Constants.TAG, "decodedBitmap: " + decodedBitmap);

假设您可以使用abs()。 我希望能帮到你的目的。

答案 3 :(得分:0)

这也有效:

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();
    }
}