Java矩阵转置实现遇IndexOutOfBoundsException问题求助
问题根源
你在transpose方法里犯了一个核心错误:初始化newTranspose时直接传入了原矩阵的data数组,导致新矩阵的行列数和原矩阵完全一致。比如输入的2x3矩阵,新矩阵也会是2x3结构。但转置需要的是3x2矩阵,当循环中j遍历到原矩阵的列索引2时,newTranspose.data[j]会访问第3行,而新矩阵只有2行,直接触发IndexOutOfBoundsException。
修复方案
转置的核心是先构建行列数互换的新数组,再用这个数组初始化Matrix对象,最后完成元素填充:
public Matrix transpose() { // 创建转置专用的二维数组:行数=原矩阵列数,列数=原矩阵行数 int[][] transposedData = new int[numColumns][numRows]; // 遍历原矩阵,将元素赋值到转置数组的对应位置 for (int i = 0; i < numRows; i++) { for (int j = 0; j < numColumns; j++) { transposedData[j][i] = data[i][j]; } } // 用转置后的数组生成新的Matrix实例并返回 return new Matrix(transposedData); }
额外说明
原Matrix构造函数的逻辑是正确的,它会根据传入的二维数组自动计算并设置numRows和numColumns,所以无需修改构造方法。
内容的提问来源于stack exchange,提问作者Preston Little
相关产品推荐
相关产品推荐

