c#框架方法

本文关键字:方法 框架 | 更新日期: 2023-09-27 18:17:19

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

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

打印以下内容:

*****
*   *
*   *
*****

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

c#框架方法

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

提示:

考虑在Frame实现中使用StringBuilderfor循环。StringBuilder有方法插入n次相同的字符

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

让我们从逻辑上把这个盒子拆开。当你认为你有足够的信息可以自己做这件事时,停止阅读,试一试。

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

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

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

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

现在,我们需要为左右两边添加行。我们把这个高度- 2乘以。我们减去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();
}