如何通过字符串创建星号模式?(C#)
所以我是一个学习C#的新程序员,以前用嵌套循环之类的东西创建过星号模式。然而,我的老师给了我们这个问题,我不完全确定这意味着什么,或者如何着手解决它。问题是: 编写一个名为BoxMaker的方法,该方法接受两个参数:宽度和高度。该方法需要在字符串中使用给定宽度和高度的星号构建一个框,然后返回该框 这就是我所拥有的:如何通过字符串创建星号模式?(C#),c#,C#,所以我是一个学习C#的新程序员,以前用嵌套循环之类的东西创建过星号模式。然而,我的老师给了我们这个问题,我不完全确定这意味着什么,或者如何着手解决它。问题是: 编写一个名为BoxMaker的方法,该方法接受两个参数:宽度和高度。该方法需要在字符串中使用给定宽度和高度的星号构建一个框,然后返回该框 这就是我所拥有的: public static void BoxMaker(int height, int width) { int num = 1; while (num <=
public static void BoxMaker(int height, int width)
{
int num = 1;
while (num <= height)
{
if (num == 1 || num == height)
{
for (int i = 1; i <= width; i++)
{
Console.Write("*");
}
}
else
{
int num2 = 1;
while (num2 <= width)
{
if (num2 == 1 || num2 == width)
{
Console.Write("*");
}
else
{
Console.Write(" ");
}
num2++;
}
}
num++;
Console.WriteLine();
}
Console.ReadKey();
}
publicstaticvoidboxmaker(整数高度、整数宽度)
{
int num=1;
while(num您几乎已经记下了它…但不是控制台。写入时,将星号连接到字符串变量中。使用\r\n在计算到宽度后,在每行末尾添加回车符/换行符。最后,一次性将box变量转储到控制台:
public static void BoxMaker(int height, int width)
{
int num = 1;
string box = "";
while (num <= height)
{
if (num == 1 || num == height)
{
for (int i = 1; i <= width; i++)
{
box += "*";
if (i == width) box += "\r\n";
}
}
else
{
int num2 = 1;
while (num2 <= width)
{
if (num2 == 1 || num2 == width)
{
box += "*";
if (num2 == width) box += "\r\n";
}
else
{
box += " ";
}
num2++;
}
}
num++;
}
Console.Write(box);
Console.ReadKey();
}
如果你的程序负责着陆航天飞机,你想学究式地对待它,或者只是想避免那些流氓的代码分析警告,那么你的最佳代码可能如下所示:
public static void BoxMaker(int height, int width)
{
string cap = new string('*', width);
string middle = "*" + new string(' ', width - 2) + "*";
StringBuilder sb = new StringBuilder();
for (var i = height; i-- > 0;)
if (i % (height-1) == 0) sb.AppendLine(cap);
else sb.AppendLine(middle);
string box = sb.ToString();
Console.Write(box);
Console.ReadLine();
}
输出
*****
* *
* *
* *
*****
其他资源
将String类的新实例初始化为指定的值
由指定的Unicode字符重复指定的次数
你考虑过问他是什么意思吗?这似乎比在互联网上随机问一群人更有可能得到正确答案。是的,我给他发了电子邮件,但与此同时,我希望有人知道他在说什么。我会说,他的意思是,你应该将输出构建为字符串,而不是控制台。你可以使用StringBuilder
而不是控制台
,然后以字符串形式返回值。每个讲师都有自己的想法。我有一个老师想让我们在PictureBox(VB6类)中构造一个带星号的单词,但当你确实这样做时,他会说,“不!不!它必须居中!”或者是其他一些一开始就没有提到的武断的东西。在这个早期阶段,需求可能是棘手的事情。只有老师才能真正说出他的意思,因为他是最终评判你作品的人。此外,如果他使用“模式”这个词,可能还有更多。不要以这种方式使用字符串。代码分析人员说:“CC0039:不要在循环中串联'box'或“S1643:改用StringBuilder”。在循环中串联字符串不是一个好方法。
public static void DrawBox(int h, int w)
{
var hoz = new string('*', w);
var vet = "*" + new string(' ', w - 2) + "*";
Console.WriteLine(hoz);
for (var i = 0; i < h - 2; i++)
Console.WriteLine(vet);
Console.WriteLine(hoz);
}
public static void DrawBox(int h, int w)
{
Console.WriteLine(new string('*', w));
for (var i = 0; i < h-2; i++)
Console.WriteLine($"*{new string(' ', w - 2)}*");
Console.WriteLine(new string('*', w));
}
public static void DrawBox(int h, int w)
{
if (h < 2) throw new ArgumentOutOfRangeException(nameof(h));
if (w < 2) throw new ArgumentOutOfRangeException(nameof(w));
DrawBox(5, 5);
*****
* *
* *
* *
*****