打开文件、读取数据和计算平均值的程序出错



在我的编程类中,我得到了一个赋值,并有一个直接读取的提示

"在这个练习中,一类学生的考试成绩存储在一个文件中。你要编写一个程序,成功地打开文件,读取考试成绩,并将其输出到控制台上。"

每次我运行程序时,都会出现一个错误,显示

"GradeCalculator.exe中发生类型为"System.IndexOutOfRangeException"的未处理异常"

错误出现在代码上,"gradesArray[i]=gradesArray[gradeData];i++;"

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
namespace GradeCalculator
{
    class Program
    {
        static void Main(string[] args)
        {
            string folder = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal) + "\grades.txt";
            int gradeData;
            StreamReader grades = new StreamReader(folder);
            int[] gradesArray = new int[50];
            while (!grades.EndOfStream)
            {
                for (int i = 0; i != 50;)
                {
                    gradeData = int.Parse(grades.ReadLine());
                    gradesArray[i] = gradesArray[gradeData];
                    i++;
                }
            }
            Program calc = new Program();
            for (int i = 0; i < 50; i++) 
            {
                int average = calc.averageArr(gradesArray);
                Console.WriteLine("{0}", average);
                Console.ReadLine();
            }
        }
        public int averageArr(int[] arr)
        {
            int avg = 0;
            int numGrades = 0;
            int sum = 0;
            for (int i = 0; i < 50; i++)
            {
                do
                {
                    sum += arr[i];
                } while (arr[i] != 0);
            }
            avg = sum / numGrades;
            return avg;
        }
    }
}

关于如何解决这个问题,有什么建议吗?

文件中的数据:88907865508375236094

编辑的新代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
namespace GradeCalculator
{
    class Program
    {
        static void Main(string[] args)
        {
            string folder = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal) + "\grades.txt";
            int gradeData;
            StreamReader grades = new StreamReader(folder);
            int[] gradesArray = new int[50];
            do
            {
                gradeData = int.Parse(grades.ReadLine());
                for (int i = 0; i != gradesArray.Length;)
                {
                    gradesArray[i] = gradeData;
                    i++;
                }
            }
            while (!grades.EndOfStream);
            Program calc = new Program();
            int average = calc.averageArr(gradesArray);
             Console.WriteLine("{0}", average);
             Console.ReadLine();
        }
        public int averageArr(int[] arr)
        {
            int avg = 0;
            int sum = 0;
            for (int i = 0; i != arr.Length; )
            {
                sum += arr[i];
                i++;
            }
            avg = sum / arr.Length;
            return avg;
        }
    }
}

您有很多冗余代码,只需使用Linq并获得一个int数组即可。

var intArray = File.ReadAllLines("filepath")
                   // Remove below line if you have only 1 number in each line, else specify delimiter and keep it.
                   .SelectMany(s=>s.Split(' '))                        
                   .Select(int.Parse);

一旦你得到数组,数组就有返回Average 的函数

var average = intArray.Average();

更新:

由于您想编写计算平均值的函数,所以可以这样做。请注意,我将一些变量类型修改为Decimal,以避免int除法。

public decimal averageArr(int[] arr)
{
    decimal avg = 0;
    int numGrades = 0;
    decimal sum = 0;
    for (int i = 0; i < arr.Length; i++)
    {
        sum += arr[i];
    }
    avg = sum / arr.Length;
    return avg;
}

最新更新