<分区>
我编写了一个非常简单的 C# 代码来执行以下任务:
给定一个代表空格数量的数字 n
,我的程序将打印沙漏:
*****
***
*
***
*****
从命令窗口的左边界墙开始 n
个空格。
我的代码按预期工作,但它非常困惑、无组织,我相信有更好的方法,也许是以前由开发 .NET Framework 的 Microsoft 开发人员在 C# 中实现的方法。
这是我的代码:
public static void printAsterisk(int initialSpace)
{
int i, j;
char[] asteriskMsg = new char[5 * initialSpace + 25];
for (i = 0; i < initialSpace; i++)
{
asteriskMsg[i] = ' ';
}
for (j = i; j < i + 5; j++)
{
asteriskMsg[j] = '*';
}
asteriskMsg[j] = '\n';
for (i = j + 1; i < j + initialSpace + 1; i++)
{
asteriskMsg[i] = ' ';
}
for (j = i + 1; j < i + 4; j++)
{
asteriskMsg[j] = '*';
}
asteriskMsg[j] = '\n';
for (i = j + 1; i < j + initialSpace + 3; i++)
{
asteriskMsg[i] = ' ';
}
asteriskMsg[i] = '*';
asteriskMsg[i + 1] = '\n';
for (j = i + 2; j < i + initialSpace + 3; j++)
{
asteriskMsg[j] = ' ';
}
for (i = j; i < j + 3; i++)
{
asteriskMsg[i] = '*';
}
asteriskMsg[i] = '\n';
for (j = i + 1; j < i + initialSpace + 1; j++)
{
asteriskMsg[j] = ' ';
}
for (i = j; i < j + 5; i++)
{
asteriskMsg[i] = '*';
}
string s = new string(asteriskMsg);
System.Console.Write("{0}", s);
}
真是太可怕了。我很好奇如何改进这段代码。
举个例子说明我的意思,这就是程序在 n=25
下的运行方式
如果 n 为零,那么您会看到相同的图片,但从左墙开始,而不是有 25 个空格。我希望现在我想做什么很清楚。
编辑:设法自己使用字符串提出了一个很好的解决方案!
public static void printAsterisk(int initialSpace)
{
string firstRow = "*****", secondRow = "***", thirdRow = "*", firstRowSpaces = new string(' ', initialSpace), secondRowSpaces = new string(' ', initialSpace+1), thirdRowSpaces = new string(' ', initialSpace+2);
string hourglass = string.Format("{0}{1}\n{2}{3}\n{4}{5}\n{2}{3}\n{0}{1}", firstRowSpaces, firstRow, secondRowSpaces, secondRow, thirdRowSpaces, thirdRow);
System.Console.WriteLine(hourglass);
}