c#框架方法
本文关键字:方法 框架 | 更新日期: 2023-09-27 18:17:19
frame方法,它有两个参数,帧长和帧高。我使用的主程序行
String s = Frame (5, 4);
Console.WriteLine (s);
打印以下内容:
*****
* *
* *
*****
这是很容易没有方法,但方法这似乎是困难的,有什么想法?这是我今天的最后一个问题。:)
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
实现中使用StringBuilder
和for
循环。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();
}