C#-创建空心矩形
本文关键字:空心 创建 C#- | 更新日期: 2023-09-27 18:24:29
我正在使用一个多维数组来创建一个"边界"。如果打印出来,它会看起来像这样:
######
# #
# #
# #
######
到目前为止,我拥有的代码可以创建顶部、左侧和底部边界。目前我不知道如何为它的右手边创建边界。
int[,] array = new int[10, 10];
//Create border around box
//Top
for (int i = 0; i < array.GetLength(0); i++)
{
array[0, i] = 1;
}
//Bottom
for (int i = 0; i < array.GetLength(0); i++)
{
array[array.GetLength(0) - 1, i] = 1;
}
//Left
for (int i = 0; i < array.GetLength(0); i++)
{
array[i, 0] = 1;
}
如何在右侧创建边界?此外,我认为我的代码可以改进,我是C#的新手。
感谢
右侧边界
右侧边界是底部边界沿对角线(从左上到右下)的反射。所以,取底部的绘图代码,并反转x和y坐标。它给出:
// Right
for (int i = 0; i < array.GetLength(0); i++)
{
array[i, array.GetLength(0) - 1] = 1;
}
代码改进
您的代码是正确的。我只建议两个改进:
首先,在C#中,数组维度在创建数组后不能更改,并且您知道数组的大小:10。因此,让我们用一个名为arraySize
的int替换所有的array.GetLength(0)
。
const int arraySize = 10;
int[,] array = new int[arraySize, arraySize];
//Create border around box
//Top
for (int i = 0; i < arraySize; i++)
{
array[0, i] = 1;
}
//Bottom
for (int i = 0; i < arraySize; i++)
{
array[arraySize - 1, i] = 1;
}
//Left
for (int i = 0; i < arraySize; i++)
{
array[i, 0] = 1;
}
// Right
for (int i = 0; i < arraySize; i++)
{
array[i, arraySize - 1] = 1;
}
第二个改进。多次使用相同的循环。让我们把它们合并在一起。
const int arraySize = 10;
int[,] array = new int[arraySize, arraySize];
// Create border around box
for (int i = 0; i < arraySize; i++)
{
array[0, i] = 1; // Top
array[arraySize - 1, i] = 1; // Bottom
array[i, 0] = 1; // Left
array[i, arraySize - 1] = 1; // Right
}
既然所有for循环都有相同的边界,为什么不在一个循环中这样做呢:
for (int i = 0; i < array.GetLength(0); i++)
{
//Top
array[0, i] = 1;
//Bottom
array[array.GetLength(0) - 1, i] = 1;
//Left
array[i, 0] = 1;
// Right
array[i, array.GetLength(0) - 1] = 1;
}
int x = 10;
int y = 10;
int[,] array = new int[x, y];
// iterate over the left coordinate
foreach(int i in Enumerable.Range(0, x))
{
array[i,0] = 1; //bottom
array[i,y-1] = 1; //top
}
// iterate over the right coordinate
foreach(int i in Enumerable.Range(0, y))
{
array[0,i] = 1; //left
array[x-1,i] = 1; //right
}