C#框架方法

时间:2011-12-08 16:36:35

标签: c#

帧方法,它有两个参数,帧长和高度。我使用的主要程序行

String s = Frame (5, 4);
Console.WriteLine (s);

打印以下内容:

*****
*   *
*   *
*****
没有方法这很容易,但是用方法这似乎很难,有什么想法吗? 这是我今天的最后一个问题。 :)

3 个答案:

答案 0 :(得分:1)

<强>提示:

考虑在StringBuilder实施中使用forFrame循环。 StringBuilder有一种方法可以将n次插入相同的字符。

答案 1 :(得分:1)

我们想要一个包含字符的字符串。 StringBuilder是一个很好的工具。

让我们逻辑地打破方框。如果您认为自己有足够的信息可以自行完成,请停止阅读并尝试一下。

我们知道我们有宽度,高度,顶部和底部。顶部和底部是实线的字符。我们可以像这样轻松创建它们:

var topOrBottom = new string('*', width);

现在我们将它附加到我们的StringBuilder:

var builder = new StringBuilder();
builder.AppendLine(topOrBottom);

现在,我们需要为左侧和右侧添加线条。我们将做这个高度 - 2次。我们减去两个因为顶部和底部将分别处理。至于我们想要追加的字符串,它的宽度是2个空格,两边都有*

var side = string.Concat('*', new string(' ', width - 2), '*');

将其放入for循环中,您应该拥有完成此操作所需的一切,并试一试。您可以在StringBuilder上使用ToString()来获取正常的字符串。


完成示例:

for (var i = 0; i < height - 2; i++)
{
    builder.AppendLine(side);
}
builder.AppendLine(topOrBottom);

附加两侧和底部。

完整的示例可能如下所示:

private static string Frame(int width, int height)
{
    if (width < 2)
    {
        throw new ArgumentOutOfRangeException("width", width, "Width must be greater or equal to 2");
    }
    if (height < 2)
    {
        throw new ArgumentOutOfRangeException("height", height, "Height must be greater or equal to 2");
    }
    var topOrBottom = new string('*', width);
    var side = string.Concat('*', new string(' ', width - 2), '*');
    var builder = new System.Text.StringBuilder();
    builder.AppendLine(topOrBottom);
    for (var i = 0; i < height - 2; i++)
    {
        builder.AppendLine(side);
    }
    builder.AppendLine(topOrBottom);
    return builder.ToString();
}

答案 2 :(得分:1)

using System;
using System.Collections.Generic;
using System.Linq;

class Sample {
    static string Frame(int width, int height){
        var wk = new List<string>();
        string term = new String('*', width);
        string inner = "*" + new String(' ', width-2) + "*";
        wk.Add(term);
        wk.AddRange(Enumerable.Repeat(inner, height-2));
        wk.Add(term);
        return String.Join("\n", wk);

    }
    static void Main(){
        string s = Frame (5, 4);
        Console.WriteLine (s);
    }
}