如何通过字符串创建星号模式?(C#)

如何通过字符串创建星号模式?(C#),c#,C#,所以我是一个学习C#的新程序员,以前用嵌套循环之类的东西创建过星号模式。然而,我的老师给了我们这个问题,我不完全确定这意味着什么,或者如何着手解决它。问题是: 编写一个名为BoxMaker的方法,该方法接受两个参数:宽度和高度。该方法需要在字符串中使用给定宽度和高度的星号构建一个框,然后返回该框 这就是我所拥有的: public static void BoxMaker(int height, int width) { int num = 1; while (num <=

所以我是一个学习C#的新程序员,以前用嵌套循环之类的东西创建过星号模式。然而,我的老师给了我们这个问题,我不完全确定这意味着什么,或者如何着手解决它。问题是:

编写一个名为BoxMaker的方法,该方法接受两个参数:宽度和高度。该方法需要在字符串中使用给定宽度和高度的星号构建一个框,然后返回该框

这就是我所拥有的:

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);
*****
*   *
*   *
*   *
*****