You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:31:03