C# 如何在控制台中打印2D字符数组矩阵?

C# 如何在控制台中打印2D字符数组矩阵?,c#,arrays,C#,Arrays,我正在尝试创建一个方法来绘制一个矩形,如下所示: -------------- | | | ********** | | ********** | | ********** | | ********** | | ********** | | ********** | | ********** | | ********** | | | -------------- 我想在控制台中显示整个阵列矩阵,但当我尝试运行该程序时,出现以下错误: 未处理的异常:S

我正在尝试创建一个方法来绘制一个矩形,如下所示:

--------------
|            |
| ********** |
| ********** |
| ********** |
| ********** |
| ********** |
| ********** |
| ********** |
| ********** |
|            |
--------------
我想在控制台中显示整个阵列矩阵,但当我尝试运行该程序时,出现以下错误:

未处理的异常:System.IndexOutOfRangeException:索引为 在数组的边界之外

我花了几个小时试图解决这个问题,但没有找到问题。这是我的密码:

public static class Canvas
{
    public static char[,] Draw (uint width, uint height)
    {
        char[,] page = new char[width + 4, height + 4];

        for (uint i = 1; i < width + 3; ++i)
        {
            for (uint j = 1; j < height + 3; ++j)
            {
                page[i, j] = '1';
            }
        }

        for (uint i = 0; i < width + 5; ++i)
        {
            page[0, i] = '-';
        }
        for (uint i = 0; i < width + 5; ++i)
        {
            page[height + 4, i] = '-';
        }
        for (uint j = 1; j < height + 4 ++j)
        {
            page[j, 0] = '|';
        }
        for (uint j = 1; j < height + 4; ++j)
        {
            page[j, width + 4] = '|';
        }
        return page;
   }
}
公共静态类画布
{
公共静态字符[,]绘图(单位宽度、单位高度)
{
字符[,]页=新字符[宽度+4,高度+4];
对于(uint i=1;i
首先,我不知道这是否是打字错误,但您的forth FOR循环在第二个参数后缺少“;”

其次,++i和i++之间存在差异。在for循环中,通常使用i++,因为它首先使用值,然后添加1。如果使用++i,它将首先加1,然后使用值。这是将计数器(i)抛出数组边界

然后,在一些循环中,使用Height+4或Width+4在数组中写入,但这会导致数组中的位置,因为数组从0开始,并且在数组构造函数中使用Height+4和Width+4

您的代码和注释:

public static class Canvas
{


    public static char[,] Draw(uint width, uint height)
    {
        char[,] page = new char[width + 4, height + 4];

        for (uint i = 1; i < width + 3; i++) //goes from 1 to 4 - 0 is null
        {
            for (uint j = 1; j < height + 3; j++) //goes from 1 to 4 - 5 is null
            {
                page[i, j] = '1';
            }
        }

        for (uint i = 0; i < width + 5; i++)  // goes from 0 to 6, but array ends at 5
        {
            page[0, i] = '-';
        }
        for (uint i = 0; i < width + 5; i++) // goes from 0 to 6, but array ends at 5
        {
            page[height + 4, i] = '-'; //the argument "height +4" throw the position out of the array, because arrays starts at 0
        }
        for (uint j = 1; j < height + 4; j++)
        {
            page[j, 0] = '|';
        }
        for (uint j = 1; j < height + 4; j++)
        {
            page[j, width + 4] = '|'; //the argument "width +4" throw the position out of the array, because arrays starts at 0
        }
        return page;
    }
}
公共静态类画布
{
公共静态字符[,]绘图(单位宽度、单位高度)
{
字符[,]页=新字符[宽度+4,高度+4];
对于(uint i=1;i
新代码:

    public static class Canvas2
{


    public static char[,] Draw(uint width, uint height)
    {
        char[,] page = new char[width + 4, height + 4];

        for (uint i = 1; i < width + 3; i++) 
        {
            for (uint j = 1; j < height + 3; j++) 
            {
                page[i, j] = '1';
            }
        }

        for (uint i = 0; i < width + 4; i++) 
        {
            page[0, i] = '-';
        }
        for (uint i = 0; i < width + 4; i++)
        {
            page[height + 3, i] = '-';
        }
        for (uint j = 1; j < height + 4; j++)
        {
            page[j, 0] = '|';
        }
        for (uint j = 1; j < height + 4; j++)
        {
            page[j, width + 3] = '|';
        }
        return page;
    }
}
publicstaticclasscanvas2
{
公共静态字符[,]绘图(单位宽度、单位高度)
{
字符[,]页=新字符[宽度+4,高度+4];
对于(uint i=1;i
输出:


错误消息本身就说明了问题。您使用的数组索引大于该数组。请记住,C#中的数组以索引0开头。char[4]表示索引必须为0..3。在循环中使用
i
,但是数组大小是
i+4
,这意味着最大的索引是
i+3
。我认为在索引处访问页面时,您在循环的第4和第6位切换了高度和宽度。您声明宽度为第一个维度,高度为第二个维度,但您在错误的位置使用了
height+4
width+4
。当然,可能会出现重复,有更快更有效的方法来实现这一点。但是了解事情的根本原因是很好的。谢谢你的帮助!我知道了一些事情:0