在数组中存储值并输出最高,最低,平均值。输出缺陷

时间:2018-03-24 17:18:00

标签: c#

这是老师在学校给我们的一个小问题。我们被要求制作一个程序,一直要求用户输入测试分数,直到他输入-99来停止程序。这些值存储在一个数组中,并显示最高,最低和平均分数。

我的代码存在的问题是,每当我运行它时,即使输入中没有零,它总是给我一个值为0的最低分数。任何人都可以在我的代码中指出错误吗?

代码:

static void Main(string[] args)
    {
        int[] za = new int[100];
        scores(za, 0);
    }

 public static void scores(int[] ar, int x)
    {

        Console.Write("Please enter homework score [0 to 100] (-99 to exit): ");
        int a = Convert.ToInt16(Console.ReadLine());
        if (a != -99)
        {
            ar[x] = a;
            x++;
            scores(ar, x);
        }
        else
        {
            Console.Clear();
            Console.WriteLine("Homework App");

            int[] arr = new int[x];
            foreach (int l in arr)
            {
                arr[l] = ar[l];
            }

            int lowest = arr[0];
            for (int i = 1; i < arr.Length; i++)
            {
                if (lowest > arr[i]) { lowest = arr[i]; }
            }

            int highest = arr[0];
            for (int j = 1; j < arr.Length; j++)
            {
                if (highest < arr[j]) { highest = arr[j]; }
            }

            double sum = 0;
            double nums = 0;
            for (int k = 0; k < arr.Length; k++)
            {
                sum = sum + arr[k];
                nums++;
            }
            double average = sum / nums;

            Console.WriteLine("Highest Score: {0}", highest);
            Console.WriteLine("Lowest Score: {0}", lowest);
            Console.WriteLine("Average Score: {0}", average);

            Console.ReadLine();
        }
    }

1 个答案:

答案 0 :(得分:1)

当您复制项目时,请不要使用foreach循环,然后将存储在数组中的元素作为要插入的索引。相反,使用带有计数器变量的for循环。

你应该改变这个:

int[] arr = new int[x];
foreach (int l in arr)
{
    // You're using the wrong value for the index here.
    // l represents the value of the item stored in `arr`, which is `0`
    arr[l] = ar[l]; 
}

对此:

int[] arr = new int[x];
for (var counter = 0; counter < x; counter++)
{
    arr[counter] = ar[counter];
}