帧方法,它有两个参数,帧长和高度。我使用的主要程序行
String s = Frame (5, 4);
Console.WriteLine (s);
打印以下内容:
*****
* *
* *
*****
没有方法这很容易,但是用方法这似乎很难,有什么想法吗?
这是我今天的最后一个问题。 :)
答案 0 :(得分:1)
<强>提示:强>
考虑在StringBuilder
实施中使用for
和Frame
循环。
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);
}
}