我需要在我的类中创建一个方法来将两个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;
}
答案 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 ++,它具有相同的最终结果,但它更符合标准。