c# -为什么这个程序给我一个错误

本文关键字:错误 一个 为什么 程序 | 更新日期: 2023-09-27 18:02:55

我正在为我的编程考试做练习,这是其中一门考试。这个程序在第一次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--;
        }
    }

c# -为什么这个程序给我一个错误

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

Sky Fang已经回答了第一个错误
之后你会得到ArgumentOutOfRangeException。为此,您必须将第二个forloop条件更改为

for (int i = 0; i < (n-1)/2; i++)
{
 ....
}

这是因为当你打印时,这是你的参数之一

new string('-', ((n - 1) / 2) - i)

当i增加到(n-1)/2时,第二个参数变为负

编辑
这是最后的代码。添加控制台。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();
    }
相关文章: