C# - 创建空心矩形

时间:2013-07-24 01:20:43

标签: c# multidimensional-array shapes

我正在使用多维数组来创建“边框”。如果它被打印出来,它看起来像这样:

######
#    #
#    #
#    #
######

到目前为止我的代码可以创建顶部,左侧和底部边框。目前我不知道如何为它的右侧创建边框。

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#的新手。

由于

3 个答案:

答案 0 :(得分:1)

由于所有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;
        }

答案 1 :(得分:1)

右边框

右边框是沿对角线(左上角到右下角)的底部边框的反射。因此,采用底部绘图代码并反转x和y坐标。它给出了:

// Right
for (int i = 0; i < array.GetLength(0); i++)
{
    array[i, array.GetLength(0) - 1] = 1;
}

代码改进

您的代码是正确的。我建议只做两个改进:

首先,在C#中,在创建数组后无法更改数组维度,并且您知道数组的大小:10。所以,让我们用名为{{1}的int替换所有array.GetLength(0) }。

arraySize

第二项改进。您使用多次相同的循环。让我们将它们合并在一起。

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;
}

答案 2 :(得分:0)

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
}