我创建了一个具有相同长度的二维数组,例如,它随机地填充了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();
        }
    }
}

最佳答案

代码不是完美的(我敢肯定它可以被优化),但是它可以工作

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

关于java - 比较行和列中的元素,在这种情况下为1和0,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39633397/

10-08 21:28