比较行和列中的元素,在本例中为1和0

时间:2016-09-22 07:57:15

标签: java arrays multidimensional-array

我创建了一个长度相同的二维数组,例如随机填充1和0。

0100
0010
1110
1111

如何对程序进行编码以找到所有1和0的对角线

到目前为止,这是我的代码:

public class Test2dArray {
    public static void main(String[] args) {        
        int row,column;
        System.out.print("Enter the lenghth of matrix:");
        Scanner input = new Scanner(System.in);
        Random rand = new Random ();
        int mSize = input.nextInt();
        int [][] mArray = new int [mSize][mSize];

        for (row=0; row < mSize; row++){
            for(column=0; column < mSize; column++){                
                mArray[row][column]=rand.nextInt(2);
                System.out.print(mArray[row][column]+ " ");
            }
            System.out.println();
        }
    }
}

2 个答案:

答案 0 :(得分:0)

代码并不完美(我确信它可以优化)但它可以正常工作

public static void main (String[] args) throws java.lang.Exception {
    int row = 5;
    int column = 5;

    int [][] mArray = fillArray(row, column);
    System.out.println("Rows: " + findRows(mArray));
    System.out.println("Columns: " + findColumns(mArray));
    System.out.println("Diags: " + findDiags(mArray));
}

private static ArrayList<Integer> findRows(int [][] mArray) {
    ArrayList<Integer> result = new ArrayList<Integer>();
    for (int i = 0; i < mArray.length; i++){
        boolean isRow = true;
        for(int j = 0; j < mArray[0].length; j++){                
            if (j > 0 && mArray[i][j] != mArray[i][j - 1]) {
                isRow = false;
                break;
            }
        }
        if (isRow) result.add(i);
    }
    return result;
}

private static ArrayList<Integer> findColumns(int [][] mArray) {
    ArrayList<Integer> result = new ArrayList<Integer>();
    for (int j = 0; j < mArray[0].length; j++){
        boolean isColumn = true;
        for(int i = 0; i < mArray.length; i++){                
            if (i > 0 && mArray[i][j] != mArray[i - 1][j]) {
                isColumn = false;
                break;
            }
        }
        if (isColumn) result.add(j);
    }
    return result;
}

private static ArrayList<Integer> findDiags(int [][] mArray) {
    ArrayList<Integer> result = new ArrayList<Integer>();
    for (int i = 1; i < mArray.length; i++) {
        boolean isDiag = true;
        for (int j = 0; j < i; j++) {
            if (mArray[i - j][j] != mArray[i - j - 1][j + 1]) {
                isDiag = false;
                break;
            }
        }
        if (isDiag) result.add(i);
    }
    for (int i = 0; i < mArray.length - 2; i++) {
        boolean isDiag = true;
        for (int j = i + 1; j < mArray.length - 1; j++) {
            if (mArray[mArray.length - j + i][j] != mArray[mArray.length - j + i - 1][j + 1]) {
                isDiag = false;
                break;
            }
        }
        if (isDiag) result.add(mArray.length + i);
    }

    return result;
}

private static int[][] fillArray(int row, int column) {
    int [][] mArray = new int [row][column];

    Random rand = new Random();
    for (int i = 0; i < row; i++){
        for(int j = 0; j < column; j++){                
            mArray[i][j] = rand.nextInt(2);
            System.out.print(mArray[i][j] + " ");
        }
        System.out.println();
    }

    return mArray;
}

答案 1 :(得分:0)

迭代每个行和每列,并将值汇总为rowSumcolumSum。 所以:

    if (rowSum == mSize)
        System.out.print("The row "+i+"is full of ones");
    if (rowSum == 0)
        System.out.print("The row "+i+"is full of zeros");

显然,对于列和对角线也是如此。