我正在练习编程考试,这是考试之一。这个程序在第一个for循环后崩溃,我无法弄清楚原因。请帮忙!
int n = int.Parse(Console.ReadLine());
Console.WriteLine("{0}{1}{0}", new string('-', n / 2), new string('*', n + 2));
for (int i = 0; i < n - 1; i++)
{
Console.WriteLine("{0}*{1}*{0}", new string('-', n / 2), new string('-', n));
}
for (int i = 0; i < n; i++)
{
Console.WriteLine(
"{0}{1}{2}{1){0}",
new string('-', ((n - 1) / 2) - i),
new string('*', 1 + 2 * i),
new string('-', n - 2 * i));
if (i < n / 2)
{
i++;
}
else
{
i--;
}
}
答案 0 :(得分:3)
"{0}{1}{2}{1){0}",
您的字符串格式错误,您需要将{1)
更改为{1}
,但似乎代码永远不会在输入为5时结束!和其他输入也有另外一个例外,你能解释一下你想做什么吗?
"{0}{1}{2}{1}{0}",
我现在将代码更改为方法
static void PrintDemo(int num)
{
if (num < 0 || num % 2 == 0)
{
return;//do nothing
}
Console.WriteLine("{0}{1}{0}", new string('-', num / 2), new string('*', num + 2));
for (int i = 0; i < num - 1; i++)
{
Console.WriteLine("{0}*{1}*{0}", new string('-', num / 2), new string('-', num));
}
for (int i = 0; i < num; i++)
{
var t1 = Math.Abs(num / 2 - i);
var t2 = t1 * 2 + 1;
var t3 = (num * 2 + 1 - t1 * 2 - t2) / 2;
Console.WriteLine(
"{0}{1}{2}{1}{0}",
new string('-', t1),
new string('*', t3),
new string('-', t2));
}
}
答案 1 :(得分:1)
第一个错误已由Sky Fang回答 之后,您将获得ArgumentOutOfRangeException。为此,您必须将第二个forloop条件更改为此
for (int i = 0; i < (n-1)/2; i++)
{
....
}
这是因为当你打印时,这是你的一个论点
new string('-', ((n - 1) / 2) - i)
当你增加到(n-1)/ 2
时,你的第二个论点变为负面 编辑
这是最终的代码。添加Console.Readline将使控制台保持运行状态,并使您能够看到输出
static void Main(string[] args)
{
int n = int.Parse(Console.ReadLine());
Console.WriteLine("{0}{1}{0}", new string('-', n / 2), new string('*', n + 2));
for (int i = 0; i < n - 1; i++)
{
Console.WriteLine("{0}*{1}*{0}", new string('-', n / 2), new string('-', n));
}
for (int i = 0; i < (n - 1) / 2; i++)
{
Console.WriteLine(
"{0}{1}{2}{1}{0}",
new string('-', ((n - 1) / 2) - i),
new string('*', 1 + 2 * i),
new string('-', n - 2 * i));
if (i < n / 2)
{
i++;
}
else
{
i--;
}
}
Console.ReadLine();
}