添加Java 2d阵列

时间:2016-04-03 02:58:30

标签: java arrays loops

我需要在我的类中创建一个方法来将两个2d数组一起添加。一个是作为方法中的参数实现的,而另一个是类对象。我需要确保数组大小相同,如果是这样,请将它们一起添加。我不断收到Array Out of Bounds错误。我的代码怎么了?

    // method to add matrices
    public int[][] add(int[][] matrix) {
    int addedMatrices[][] = new int[row][column];
    if (userArray[row][column] == matrix[row][column]) {
        for (int i = 0; i < row; ++i) {
            for (int j = 0; j < column; ++j) {
                addedMatrices[i][j] = matrix[i][j] + userArray[i][j];
                System.out.println(addedMatrices[i][j]);
            }
        }
    }
    return addedMatrices;
}

4 个答案:

答案 0 :(得分:2)

if (userArray[row][column] == matrix[row][column])就是问题所在。

请记住,数组是零索引的,因此元素的编号从零到row - 1。尝试访问行row可以保留ArrayIndexOutOfBoundsException,因为最后一行是索引row - 1

我不确定你为什么要这条线。如果您将row更改为row - 1而将column更改为column - 1,则此行会检查两个矩阵中的右下角是否相同。如果他们不是那么矩阵将不会被加总。那是你打算做的吗?

答案 1 :(得分:1)

我认为这就是你要做的事情:

public class Test {

    static int row =3;
    static int column =2;
    static int[][]  userArray = new int[][] {{1,1},{2,2},{3,3}};

    public static void main(String[] args)  {

        add(new int[][] {{4,4},{5,5},{6,6}});
    }

    // method to add matrices
    public static int[][] add(int[][] matrix) {

        int addedMatrices[][] = new int[row][column];

        //check arrays are of the same size
        if ((userArray.length == matrix.length)   &&  (userArray[0].length == matrix[0].length)  ) {

            for (int i = 0; i < row; ++i) {

                for (int j = 0; j < column; ++j) {
                    addedMatrices[i][j] = matrix[i][j] + userArray[i][j];

                    //printout
                    if(j == (column -1)) {
                        for(int col = 0; col < column; col++) {
                            System.out.print(addedMatrices[i][col]+ " ");
                        }
                    }
                    System.out.println();
                }
            }
        }
        return addedMatrices;
    }
} 

或更好:

public class Test {

    static int[][]  userArray = new int[][] {{1,1},{2,2},{3,3}, {4,4}};

    public static void main(String[] args)  {

        add(new int[][] {{5,5},{6,6},{7,7},{8,8}});
    }

    // method to add matrices
    public static int[][] add(int[][] matrix) {

        //check arrays are of the same size
        if ((userArray.length != matrix.length) ||  (userArray[0].length != matrix[0].length)  ) {

            System.out.println("Error: arrays are not of the same size");
            return null;
        }

        int rows = userArray.length;
        int cols = userArray[0].length;

        int addedMatrices[][] = new int[rows][cols];

            for (int i = 0; i < rows; ++i) {

                for (int j = 0; j < cols; ++j) {

                    addedMatrices[i][j] = matrix[i][j] + userArray[i][j];

                    //printout
                    if(j == (cols -1)) {
                        for(int col = 0; col < cols; col++) {
                            System.out.print(addedMatrices[i][col]+ " ");
                        }
                    }
                    System.out.println();
                }
            }

        return addedMatrices;
    }
}

要使打印更优雅,您可以将for循环更改为:

            for (int i = 0; i < rows; ++i) {

                for (int j = 0; j < cols; ++j) {

                    addedMatrices[i][j] = matrix[i][j] + userArray[i][j];
                }

                System.out.println(Arrays.toString(addedMatrices[i]));
            }

答案 2 :(得分:1)

if (userArray[row][column] == matrix[row][column]) {应替换为一行,以检查两个矩阵的尺寸是否相同(我猜这是他们想要的)。假设它们都是矩形数组,并且非空数字:

public class MatrixAdder {
    static public int[][] userArray =   {{1,2},{3,4},{5,6}};

    static public int[][] add(int[][] matrix) {
        final int nb_rows1 = matrix.length;    // nb rows in matrix                                          
        final int nb_cols1 = matrix[0].length; // nb columns in matrix                                       
        final int nb_rows2 = userArray.length; // nb rows in userArray                                       
        final int nb_cols2 = userArray[0].length; // nb columns in userArray                                 
        // this assumes A[0] exists, and A[0].length == A[1].length == ...                                   
        // both for matrix and userArray                                                                     
        int addedMatrices[][] = new int[nb_rows1][nb_rows1];
        if ((nb_rows1==nb_rows2) && (nb_cols1==nb_cols2)) {
            for (int i = 0; i < nb_rows1; ++i) {
                for (int j = 0; j < nb_cols1; ++j) {
                    addedMatrices[i][j] = matrix[i][j] + userArray[i][j];
                    System.out.println(addedMatrices[i][j]);
                }
            }
        }
        return addedMatrices;
    }

    static public void main(String[] args)
    {
        int[][] mx1 = {{10,100},{20,200},{40,400}};
        int [][] mx2 = add(mx1);
    }
}

为了更加健壮,您可以检查所有子阵列的尺寸是否相同。您还可以检查矩阵是否为零维度(否则array[0]将给出错误)。

如果尺寸不相同,则返回的矩阵用零填充。

如果这不是您所需要的,那么它应该给您足够的提示。

答案 3 :(得分:0)

if(userArray [row] [column] == matrix [row] [column]){}

这对我来说很奇怪,老实说我不知道​​意图是什么(你只是比较每个数组的最后一个元素)。

我愿意 if(addedMatrices.length == userArray.length&amp;&amp; addedMatrices.length == matrix.length){}。

这很难看,但我对userArray或matrix一无所知。我假设userArray是全局的。同样做j ++和i ++,它具有相同的最终结果,但它更符合标准。