C#非方阵(3*2)转置异常求助:仅输出前4个值
排查3×2矩阵转置的输出问题
嘿,我一眼就看到代码里的两个关键问题,导致转置矩阵只输出了前4个值:
1. 转置赋值的索引逻辑搞反了
你现在写的是 matrix2[j, i] = matrix1[j, i];,这完全搞错了转置的对应关系!转置的核心是把原矩阵第i行第j列的元素,放到转置矩阵的第j行第i列。正确的赋值应该是:
matrix2[j, i] = matrix1[i, j];
你原来的写法,当i=2(原矩阵第三行)时,j=0会访问matrix1[0,2],但原矩阵只有2列(索引0和1),这直接触发了IndexOutOfRangeException,程序在执行到这一步时崩溃,所以后面的5和6根本没机会输出。
2. 转置矩阵的输出循环不匹配
转置后的矩阵是2行3列(COLS×ROWS),但你还是用原矩阵的行数(3次)来循环输出,这会导致输出结构混乱。正确的做法是遍历转置矩阵的行和列:
修正后的完整代码
//const const int ROWS = 3; const int COLS = 2; //first matrix int[,] matrix1 = new int[ROWS, COLS]; for (int i = 0; i < ROWS; i++) { for (int j = 0; j < COLS; j++) { Console.Write("Enter num: "); matrix1[i, j] = int.Parse(Console.ReadLine()); } } //output original matrix Console.WriteLine("Eerste matrix: "); for (int i = 0; i < ROWS; i++) { for (int j = 0; j < COLS; j++) { Console.Write(matrix1[i, j] + " "); } Console.WriteLine(" "); } //transposed matrix Console.WriteLine("Tweede matrix: "); int[,] matrix2 = new int[COLS, ROWS]; // 先完成转置赋值 for (int i = 0; i < ROWS; i++) { for (int j = 0; j < COLS; j++) { matrix2[j, i] = matrix1[i, j]; // 修正索引对应关系 } } // 再单独输出转置矩阵,遍历转置后的行列 for (int i = 0; i < COLS; i++) { for (int j = 0; j < ROWS; j++) { Console.Write(matrix2[i, j] + " "); } Console.WriteLine(" "); }
修正后的运行效果
输入1-6之后,转置矩阵会正确输出:
Tweede matrix: 1 3 5 2 4 6
这里我把赋值和输出分开了,这样逻辑更清晰,也能避免在赋值过程中因为索引错误打断输出流程。
内容的提问来源于stack exchange,提问作者L.Tab
相关产品推荐
相关产品推荐

