我无法弄清楚如何从文本文件中读取项目并将它们放入int数组中。我的目标是计算平均成绩。为此,我需要阅读一个数字,告诉我1个学生有多少年级,然后使用这个数量,自己阅读成绩。例如,第一列显示成绩的数量,所有剩余的列显示成绩:
5;8;7;9;10;4
3;8;9;10
2;5;9
我写的代码:
static void ReadData(out Student[] Student, out Faculty Faculty)
{
using (StreamReader read = new StreamReader(@"Data", Encoding.GetEncoding(1257)))
{
string line = null;
Student = new Student[Faculty.CMax];
Faculty = new Faculty();
while (null != (line = read.ReadLine()))
{
string[] values = line.Split(';');
string lastname = values[0];
string name = values[1];
string group = values[2];
int amount = int.Parse(values[3]);
int grades = int.Parse(values[4]);
Student studen = new Student(lastname, name, group, amount, grades);
Student.Take[Faculty.AmountOfStudents++] = studen;
}
}
}
我知道int[] grades = int.Parse(values[4]);
是问题所在。但我不知道如何解决它。可能是一个新手问题,谢谢你的帮助。
答案 0 :(得分:3)
在澄清之后,您似乎想要:
Smith;John;XYZ;4;2;4;6;8
并检索[2,4,6,8]
的数组,以便从中获得平均值。
如果你不能做我在评论中提到的内容,那么这是一个解决方法。由于等级的数量是无关紧要的,只需忽略它,你就会发现你需要一个int数组,其中包含的项目比原来少4个。然后只是复制它们的问题:
string[] fields = val.Split(';');
int[] grades = new int[fields.Length - 4];
for (int i = 4; i < fields.Length; ++i)
{
grades[i - 4] = int.Parse(fields[i]);
}
或者其他一些替代版本,如果你进入LINQ:
string[] fields = val.Split(';');
int[] grades = Enumerable.Range(4, fields.Length - 4)
.Select(i => int.Parse(fields[i]))
.ToArray();
string[] fields = val.Split(';');
int[] grades = fields.Select((s, i) => new { s, i })
.Where(x => x.i >= 4)
.Select(x => int.Parse(x.s))
.ToArray();