2

静态虚空主要在这里

        string[] dayNames = { "Sun", "Mon", "Tues", "Wed", "Thur", "Fri", "Sat" };

        string m = "";

        double average = 0;
        double total = 0;

        int[] bCalories = new int[7];
        int[] lCalories = new int[7];
        int[] dCalories = new int[7];

        int[] dayTotal = new int[7];

        for (int i = 0; i < 7; i++)
        {
            Console.Write("Please enter calories for {0} breakfast: ", dayNames[i]);
            bCalories[i] = int.Parse(Console.ReadLine());
            Console.Write("Please enter calories for {0} lunch: ", dayNames[i]);
            lCalories[i] = int.Parse(Console.ReadLine());
            Console.Write("Please enter calories for {0} dinner: ", dayNames[i]);
            dCalories[i] = int.Parse(Console.ReadLine());

            dayTotal[i] += bCalories[i];
            dayTotal[i] += lCalories[i];
            dayTotal[i] += dCalories[i];

            total += dayTotal[i];
            Console.WriteLine();
        }
        average = total /7;
        Console.Clear();
        Console.WriteLine("Day\t\tBreakfast\tLunch\tDinner\tDay Total");
        for (int i = 0; i < 7; i++)
        {
            if (dayTotal[i] > average)
            {
                 m = "*** Above Average";
            }
            else if(dayTotal[i] <= average)
                 m = "";

在我将字符串 m 添加到下面的写入行之后,我只收到错误索引(从零开始)必须大于或等于零并且小于参数列表的大小。如果我没有字符串 m语句结束,然后程序运行正常,只有当我添加它时,我才得到一个错误

         Console.Write("{0}\t\t{1}\t\t{2}\t{3}\t{4}\t{5}\n", dayNames[i],
         bCalories[i], lCalories[i], dCalories[i], dayTotal[i] + m);
        }

        Console.Write("Average daily calories: {0}", average);
        Console.ReadLine();
    }
4

1 回答 1

6

问题在这里:

    Console.Write("{0}\t\t{1}\t\t{2}\t{3}\t{4}\t{5}\n", dayNames[i],
     bCalories[i], lCalories[i], dCalories[i], dayTotal[i] + m);

您有 6 个说明符 (0 - 5),但只有 5 个参数被传入。如果您将其更改为仅包含{4},它应该可以正常工作:

    Console.WriteLine("{0}\t\t{1}\t\t{2}\t{3}\t{4}", dayNames[i],
     bCalories[i], lCalories[i], dCalories[i], dayTotal[i] + m);

我还建议使用Console.WriteLine而不是Console.Write使用\n. 这表明您打算添加一行,这反过来又使代码更易于阅读和维护。

于 2013-03-18T19:05:45.590 回答