如何检查矩阵(数组)是否有一列与行

时间:2016-01-04 12:22:53

标签: java arrays matrix

我已经在一个年级里学习了三个月的Java,现在我正在重做我们之前做过的一些练习,并且我做了一个我之前做不到的练习。 措辞如下: 编写一个程序,通过扫描程序启动NxN的matrhix,并告诉是否存在与某些列完全相同的行,加入相同的行和列的索引。 例如,如果我们有下一个二维数组:

   0   1   2
0 [1] [2] [1]
1 [4] [8] [2]
2 [3] [5] [1]

程序会告诉我,第0行与第2列相同。 抱歉我的英语不好,我是西班牙语。 所以这就是我所做的代码:

package Arrays;

public class Ejercicio16 {



    public static void main(String[] args) {
            int matrix[][];
            int i, j;
            int rows, columns;
            boolean same = false;

            //1.Ask inf of the matrix to the user.
            do{ 
                rows = Teclado.nextInt("Insert the number of rows of the matrix");
                columns = Teclado.nextInt("Insert the number of columns of the matrix");    
            }while(rows<=0 && columns<=0);

    /*Teclado = A java class that I use with methos like nextInt, nextByte, etc with their try catchs and so on.It would be a Scanner method*/


    matrix = new int[rows][columns];



    for (i=0; i<rows; i++) {
        for (j=0; j<columns; j++){
            matrix[i][j] = Teclado.nextInt("Insert a value for the cell of the row: "+ i + " column: " + j);
                        }
                    }

            //4. Show the matrix inserted by the user.
            for (i=0; i<rows; i++){
                for (j=0; j<columns; j++){
                    System.out.print( "[" + matrix[i][j] + "]" + " ");
                    }
                System.out.println();
            }

            checkEquality(matrix, rows, columns, same);




        }
        public static boolean comprobarIgualdad(int matriz[][], int filas, int columnas, boolean igual){
            int i, j;

            for (i=0; i<rows; i++){
                for (j=0; j<columns; j++){
                    if(matrix[i] == matrix[j])
                        same = true;
                    else
                        same = false;
                    }

            }
            return same;





        }

    }

现在,我的问题是:我不知道如何使方法垂直和水平地超过矩阵并检查它们是否相同。我这些天一直在想,但我找不到答案,所以我想在这里寻求帮助。我想自己解决这个问题,但我想我不能,所以任何帮助都很受欢迎。如果您对我的代码有任何疑问,请告诉我!

2 个答案:

答案 0 :(得分:0)

嗯,如您所知,在二维数组上运行总是在嵌套循环中完成。您必须使用每个可能的星座(即,第0行和第0列,第0行和第1列,第0行和第2列,第1行和第0列,......)调用checkEquality()

for (int i = 0; i < matrix.length; i++) {
    for (int j = 0; j < matrix[i].length; j++) {
        if (checkEquality(matrix, i, j)) // no need for same here in my opinion
           System.out.println("Row " + i + " and " + " column " + j + " are equal.");
    }
}
[...]
private static boolean checkEquality(int[][] matrix, int row, int column) {
    for (int i = 0; i < matrix.length; i++) { // only works if number of rows equal number of columns
        if (matrix[row][i] != matrix[i][column]) { // running through rows and columns
            // if a single value is not equal you can stop searching and return false
            return false;
       }
    }
    return true; // otherwise it is true
}

答案 1 :(得分:0)

如果行的长度与cols相同,则可以尝试此操作。

private boolean checkRowsEquality(int[][] matrix, int row, int col) {
    for (int i = 0; i < matrix.length; i++) {
           if (matrix[row][i] != matrix[i][col])
               return false;
    }
    return true;
}


private boolean checkEquality(int[][] matrix) {
    for (int i = 0; i < matrix.length; i++) {
        for (int j = 0; j < matrix[i].length; j++) {
            if (checkEquality(matrix, i, j)) 
               return true;
        }
    }
    return false;
}

我希望它有所帮助。我也来自西班牙。 Suerte:D