报错,如题,请教下这是什么错?

class Matrix
{
int m; //行
int n; //列
int [][] array = new int[10][];

Matrix MatrixMul(Matrix ma1, Matrix ma2) //乘法
{
Matrix matrix_mul = new Matrix();
matrix_mul.m = ma1.m;
matrix_mul.n = ma2.n;
matrix_mul.array = new int[matrix_mul.m][matrix_mul.n];

for(int k = 0; k < matrix_mul.m; k++)
{
matrix_mul.array[k] = new int[matrix_mul.n];
}

for(int i = 0; i < matrix_mul.m; i++)
{
for(int j = 0; j < matrix_mul.n; i++)
{
matrix_mul.array[i][j] = 0;
for(int k = 0; k < ma1.n; k++)
{
matrix_mul.array[i][j] += ma1.array[i][k] * ma2.array[k][j];
}
}
}

return matrix_mul;
}
}

//main函数里的部分
if(ma1.n == ma2.m)
{
System.out.println("能做乘法运算,结果是:");

Matrix ma5 = new Matrix();
ma5 = ma5.MatrixMul(ma1, ma2);

for(int i = 0; i < ma5.m; i++)
{
for(int j = 0; j < ma5.n; j++)
{
System.out.print(ma5.array[i][j] + " ");
}
System.out.println( );
}
}
else
System.out.println("不能做乘法运算");
}

紫衣仙女
浏览 131回答 2
2回答

繁华开满天机

1. Matrix MatrixMul(Matrix ma1, Matrix ma2) //乘法{Matrix matrix_mul = new Matrix();matrix_mul.m = ma1.m;这里边的Matrix matrix_mul = new Matrix();声明的是一个局部变量,只在方法内部有效,方法调用完之后会释放,不会有什么返回结果的吧。我觉得Matrix matrix_mul = new Matrix();放到方法外边比较好。2. 还有就是main里边的代码都粘全了么?如果粘全了的话,那ma1和ma2是在哪里声明的呢?如果调用的是Matrix MatrixMul(Matrix ma1, Matrix ma2)里边的话,那也不对吧,他们都是形参只在声明的方法内部有效,外部方法不能调用的。不知道这个数组越界的错误是怎么报出来的。

临摹微笑

for(int j = 0; j < matrix_mul.n; i++)这里你忘了把i改成j。第二个没有给matrix_mul.array = new int[matrix_mul.m][matrix_mul.n],这个数组初始化,在main函数里输出结果应该都是0;MatrixMul方法,这个方法的算法是:二维数组里某个元素的值等于这个元素的列值乘以这个元素的行值然后进行相加赋给这个元素。
打开App,查看更多内容
随时随地看视频慕课网APP