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

C#重写ToString()按指定格式打印二维矩阵的问题求解

问题原因

两个核心错误导致实现失败:

  • 循环边界错误:C# 数组索引起始值为0,this.matrix 共this.rows行、this.columns列,合法行索引范围是0 ~ this.rows - 1,合法列索引范围是0 ~ this.columns -1。原来写的r <= this.rows、c <= this.columns会访问数组不存在的索引位置,要么触发索引越界,要么取到未赋值的空值,引发NullReferenceException。
  • 循环逻辑划分错误:外层循环应该处理行级逻辑(行首的[、行尾的]\n),内层循环只负责拼接当前行的列值和列之间的空格,之前没有拆分两层循环的职责,很容易出现拼接顺序错乱。
可直接运行的实现

建议用StringBuilder做字符串拼接,性能远高于反复拼接string对象,代码如下:

using System.Text; // 记得引入这个命名空间

public override string ToString()
{
    // 防御性校验,避免字段未初始化时报错
    if (this.matrix == null || this.rows <= 0 || this.columns <= 0)
    {
        return string.Empty;
    }

    StringBuilder matrixView = new StringBuilder();
    // 遍历每一行,边界用 < 而非 <=
    for (int r = 0; r < this.rows; r++)
    {
        matrixView.Append('[');
        // 遍历当前行的所有列
        for (int c = 0; c < this.columns; c++)
        {
            // 处理单元格值为null的情况,默认输出0,避免空引用异常
            matrixView.Append(this.matrix[r, c]?.ToString() ?? "0");
            // 非最后一列时,值后面补空格
            if (c != this.columns - 1)
            {
                matrixView.Append(' ');
            }
        }
        // 行尾加]和换行
        matrixView.Append("]\n");
    }

    return matrixView.ToString();
}
逻辑说明
  • 每行固定以[开头,遍历完当前行所有列后加]和换行,严格执行this.rows次,符合行数要求
  • 每行内输出this.columns个值,仅在非最后一个值后面加空格,刚好凑够this.columns - 1个分隔空格,完全匹配要求的输出格式
  • 空值校验逻辑覆盖了matrix未初始化、单元格值为null两种会触发空引用的场景

内容的提问来源于stack exchange,提问作者user17682078

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 03:51:23