【发布时间】:2018-11-06 05:15:27
【问题描述】:
它不断抛出异常数组索引超出乘法方法的范围,但尺寸是正确的。错误出现在这一行:
mm[r][c]+=multiplier[i][j]*multiplicand[j][i];
在这一行:
k.multiply_matrix(temp1,temp2,i1,h,i2);
我想知道为什么会抛出异常,以及为了让我的代码正确运行而可能进行的修改。
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;
public class matrixmultiplication
{
public static void main(String args[])
{
matrixmultiplication k=new matrixmultiplication();
System.out.println("enter how many rows and how many columns");
Scanner c=new Scanner(System.in);
String f=c.next();
String[] x=f.split(",");
int i1=Integer.parseInt(x[0]);
int i2=Integer.parseInt(x[1]);
int[][] temp1=k.enter_thematrix(i1,i2);
System.out.println("how many columns in the second matrix");
int h=c.nextInt();
int[][] temp2=k.enter_thematrix(i2,h);
k.multiply_matrix(temp1,temp2,i1,h,i2);
}
public int[][] enter_thematrix(int d1,int d2)
{
Scanner c1=new Scanner(System.in);
int the_matrix[][]=new int[d1][d2];
for (int col=0;col<d2;col++)
{
for(int row=0;row<d1;row++)
{
the_matrix[row][col]=c1.nextInt();
}
}
return the_matrix;
}
public void print_matrix(int [][]mm,int a,int s)
{
for (int col=0;col<s;col++)
{
for(int row=0;row<a;row++)
{
System.out.print(mm[a][s]+"\t");
}
System.out.println();
}
}
public void multiply_matrix(int [][]multiplier,int [][]multiplicand,int r,int c,int innerd)
{
int [][]mm=new int[r][c];
for(int c1=0;c1<c;c1++)
{
for(int r1=0;r1<r;r1++)
{
for(int i=0;i<innerd;i++)
{
for(int j=0;j<innerd;j++)
{
mm[r][c]+=multiplier[i][j]*multiplicand[j][i];
}
}
}
}
print_matrix(mm,r,c);
}
}
【问题讨论】:
-
报错时
i、j、r、c的值是多少? -
另外请提供minimal reproducible example。你有什么意见?
-
您应该描述输入。作为一个有根据的猜测,我认为问题在于您正在反转行和列尺寸。
-
“但是尺寸是正确的” - 那么什么不正确?不要只是假设,调试。抛出异常时,您用来访问数组的变量的值是多少?这些数组的尺寸是多少?你看得到差别吗?在你的逻辑中,你试图访问数组边界之外的元素,为什么?
-
教科书上的矩阵乘法通常是三折,
innerd的目的是什么?
标签: java multidimensional-array indexoutofboundsexception