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