打印二维数组Java

时间:2018-07-29 14:01:20

标签: java arrays multidimensional-array

我有一个任务,要以特定的方式填充二维数组,因此它应该产生如图所示的输出,例如: 1 0 0 0 0 0 1 0 1 0 0 0 1 0 0 0 1 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 1 0 0 0 1 0 0 0 1 0 1 0 0 0 0 0 1

这就是我所做的,并且效果很好:

public class TwoDArrays {
    public static void main(String[] args) {
        FillUpTwoDArray(7, 7);
    }

    public static void FillUpTwoDArrays(int rows, int columns) {
        int twoD[][] = new int[rows][columns];
        for (int i = 0; i < rows; i++) {
            for (int j = 0; j < columns; j++) {
                twoD[i][j] = 0;
                if (i == j) {
                    twoD[i][j] = 1;
                }
                if (i + j == rows - 1) {
                    twoD[i][j] = 1;
                }
            }
        }
        for (int i = 0; i < rows; i++) {
            for (int j = 0; j < columns; j++)
                System.out.print(twoD[i][j] + " ");
            System.out.println();
        }
    }
    ...
}

我的头痛从这里开始: 1 1 1 1 1 1 1 0 1 1 1 1 1 0 0 0 1 1 1 0 0 0 0 0 1 0 0 0 0 0 1 1 1 0 0 0 1 1 1 1 1 0 1 1 1 1 1 1 1

也许某人的逻辑看起来很明显,但是我完全不知道如何向JVM解释这一点。我不要求您提供解决方案的答案,有些提示会很完美,在此先感谢您!

1 个答案:

答案 0 :(得分:2)

因此,您需要做的是攻击已经在打印的对角线内存在的其他边界条件。第一个边界定义为列索引大于行索引但小于行长减去行索引的区域:

for (int k = j; k < twoD[i].length - i; k++) {
    if (k > i) {
        twoD[i][k] = 1;
    }
}

三角形的下部较硬。边界定义为列索引位于行索引和行长度之间的区域,减去行索引,负1:

for (int h = j; h < twoD[i].length; h++) {
    if (h < i && j > (rows - i - 1)) {
        twoD[i][h] = 1;
    }
}

连同其余代码一起,解决方案(或更确切地说是解决方案;我不认为这是经过优化的)将是:

public class TwoDArrays {
    public static void main(String[] args) {
        FillUpTwoDArrays(7, 7);
    }

    public static void FillUpTwoDArrays(int rows, int columns) {
        int twoD[][] = new int[rows][columns];
        for (int i = 0; i < rows; i++) {
            for (int j = 0; j < columns; j++) {
                twoD[i][j] = 0;

                for (int k = j; k < twoD[i].length - i; k++) {
                    if (k > i) {
                        twoD[i][k] = 1;
                    }
                }

                if (i == j) {
                    twoD[i][j] = 1;
                }

                if (i + j == rows - 1) {
                    twoD[i][j] = 1;
                }

                for (int h = j; h < twoD[i].length; h++) {
                    if (h < i && j > (rows - i - 1)) {
                        twoD[i][h] = 1;
                    }
                }
            }
        }
        for (int i = 0; i < rows; i++) {
            for (int j = 0; j < columns; j++)
                System.out.print(twoD[i][j] + " ");
            System.out.println();
        }
    }
}