我正在练习在以下结果中生成星星。
*
**
***
**
*
代码:
private static void ShowStar(int p)
{
StringBuilder foward = new StringBuilder();
StringBuilder reverse = new StringBuilder();
for (int i = 0; i <= p; i++)
{
foward.Append('*');
Console.WriteLine(foward.ToString());
reverse.Insert(0,foward.ToString().Substring(1) + "\r\n");
if (i == p)
{
Console.WriteLine(reverse.ToString());
}
}
}
但我想以更简单的方式打印它,有没有人有任何好主意?
非常感谢!!
答案 0 :(得分:1)
public static void ShowStar(int p)
{
for (int i = 1; i < p * 2; i++)
Console.WriteLine(new string('*', (i < p) ? i : p * 2 - i));
}
答案 1 :(得分:0)
将星形图案打印分成两个循环。
第一个循环打印
*
**
从行号1到行号(n / 2)
。
而第二个循环打印
***
**
*
这是来自行号(n / 2 + 1) to n
。其中n
是最大行号。
希望它能让你的代码更容易。
答案 2 :(得分:0)
只是为了好玩
string CreateArrow(int count)
{
// Only one buffer
StringBuilder sbAll = new StringBuilder();
// The arrow needs an arrowhead
if(count % 2 == 0) count++;
// Create the arrowhead
string s = new string('*', count);
sbAll.AppendLine(s);
// the rest of the arrow
for(int x = count-1; x>0; x--)
{
s = new string('*', x);
// before the arrowhead
sbAll.Insert(0, s + Environment.NewLine);
// after the arrowhead
sbAll.AppendLine(s);
}
return sbAll.ToString();
}
答案 3 :(得分:0)
我建议先将这些行收集到一个数组中,然后打印出该数组。这种方式更清洁。想象一下,如果是后者,你想修改你的代码,并希望将它写入文件,或者用它进行其他处理。
private static void ShowStar(int p)
{
// collecting data. In more complex environments this should be
// in a separate method, like var lines = collectLines(p)
var lines = new string[p*2+1];
var stars = "*";
for (int i = 0; i <= p; i++)
{
lines[i] = lines[p * 2 - i] = stars;
stars += "*";
}
// writing the data. In more complex environments this should be
// in a separate method, like WriteLines(lines)
foreach (var line in lines)
{
Console.WriteLine(line);
}
}