从文件中读取并查找max c#
我刚开始学习c#3个多月,所以作为家庭作业,我要做一个练习,从一个有50个名字和分数的文本文件中阅读。我必须找到带有最高标记的名称并显示它,然后将结果保存到文本文件中。这就是我想到的从文件中读取并查找max c#,c#,struct,procedures,C#,Struct,Procedures,我刚开始学习c#3个多月,所以作为家庭作业,我要做一个练习,从一个有50个名字和分数的文本文件中阅读。我必须找到带有最高标记的名称并显示它,然后将结果保存到文本文件中。这就是我想到的 namespace FINAL { class Program { public static string [] parts; struct StudentDetails { public string name;
namespace FINAL
{
class Program
{
public static string [] parts;
struct StudentDetails
{
public string name;
public string surname;
};
struct CourseWorkResults
{ public int mark;
};
static void Main(string[] args)
{
string [] Lines = System.IO.File.ReadAllLines(@"F:\FINAL\StudentExamMarks.txt");
foreach (string line in Lines)
{
string[] parts = line.Split();
}
StudentDetails[] Student = new StudentDetails[50];
CourseWorkResults[] Results = new CourseWorkResults[50];
GetName( ref Student ,ref parts );
FindMark ( ref Results , parts);
FindMax (ref Results);
}
static void GetName(ref StudentDetails[]Student, ref string[] parts)
{
for (int i = 0; i < Student.Length; i++ )
{
Student[i].name = parts[0];
Student[i].surname = parts[1];
}
}
static void FindMark ( ref CourseWorkResults[]Results, string [] parts )
{
for (int i=0; i< Results.Length;i++)
{
Results[i].mark = Convert.ToInt16(parts[2]);
}
}
static void FindMax( ref CourseWorkResults[]Results)
{
for (int i = 0; i < Results.Length; i++)
{
int max = 0;
max = Results[2].mark;
if (Results[i].mark > max)
{
max = Results[i].mark;
}
}
}
static void DisplayResults( ref CourseWorkResults[]Results, StudentDetails[]Student, int max)
{
Console.WriteLine(" The student with the highest score is {0} {1} :{2}", Student[0].name, Student[1].surname, max);
}
}
}
namespace FINAL
{
班级计划
{
公共静态字符串[]部分;
struct StudentDetails
{
公共字符串名称;
公共字符串姓氏;
};
结构课程工作结果
{公共整数标记;
};
静态void Main(字符串[]参数)
{
string[]Lines=System.IO.File.ReadAllLines(@“F:\FINAL\StudentExamMarks.txt”);
foreach(行中的字符串行)
{
string[]parts=line.Split();
}
StudentDetails[]Student=新的StudentDetails[50];
CourseWorkResults[]结果=新的CourseWorkResults[50];
GetName(参考学生,参考部分);
FindMark(参考结果、零件);
FindMax(参考结果);
}
静态void GetName(ref StudentDetails[]Student,ref string[]parts)
{
for(int i=0;i最大值)
{
max=结果[i]。标记;
}
}
}
静态无效显示结果(参考CourseWorkResults[]Results,StudentDetails[]Student,int max)
{
Console.WriteLine(“得分最高的学生是{0}{1}:{2}”,学生[0]。姓名,学生[1]。姓氏,max);
}
}
}
我的问题是GetName过程,我不能通过引用传递部件。我做错了什么 这里的问题是
struct
是一种不可变的值类型。所以当你写作时:
Student[i].name = parts[0];
您正在尝试修改本地文件,以创建学生[i]
的副本。实际上,每次尝试访问Student[i]
,它都会返回一个复制的值,而不是列表上的实例
解决方法是将StudentDetails
作为class
而不是struct
class StudentDetails
{
public string name;
public string surname;
};
该问题也适用于CourseWorkResults
struct
此外,as数组已在.NET中引用。除非希望它引用另一个对象,否则实际上不需要将其作为引用传递。即:
static void GetName(StudentDetails[]Student, ref string[] parts)
{
for (int i = 0; i < Student.Length; i++ )
{
Student[i].name = parts[0];
Student[i].surname = parts[1];
}
}
static void GetName(StudentDetails[]Student,ref string[]parts)
{
for(int i=0;i
将作为
static void GetName(ref StudentDetails[]Student, ref string[] parts)
{
for (int i = 0; i < Student.Length; i++ )
{
Student[i].name = parts[0];
Student[i].surname = parts[1];
}
}
static void GetName(ref StudentDetails[]Student,ref string[]parts)
{
for(int i=0;i
除非您添加以下内容:
static void GetName(ref StudentDetails[]Student, ref string[] parts)
{
Student = anotherStudentArray ; // Here the ref param is really needed as you want to reassign Student to a new array instance
for (int i = 0; i < Student.Length; i++ )
{
Student[i].name = parts[0];
Student[i].surname = parts[1];
}
}
static void GetName(ref StudentDetails[]Student,ref string[]parts)
{
Student=anotherStudentArray;//这里确实需要ref参数,因为您要将Student重新分配给新的数组实例
for(int i=0;i
这里的问题是结构是一种不可变的值类型。所以当你写作时:
Student[i].name = parts[0];
您正在尝试修改本地文件,以创建学生[i]
的副本。实际上,每次尝试访问Student[i]
,它都会返回一个复制的值,而不是列表上的实例
解决方法是将StudentDetails
作为class
而不是struct
class StudentDetails
{
public string name;
public string surname;
};
该问题也适用于CourseWorkResults
struct
此外,as数组已在.NET中引用。除非希望它引用另一个对象,否则实际上不需要将其作为引用传递。即:
static void GetName(StudentDetails[]Student, ref string[] parts)
{
for (int i = 0; i < Student.Length; i++ )
{
Student[i].name = parts[0];
Student[i].surname = parts[1];
}
}
static void GetName(StudentDetails[]Student,ref string[]parts)
{
for(int i=0;i
将作为
static void GetName(ref StudentDetails[]Student, ref string[] parts)
{
for (int i = 0; i < Student.Length; i++ )
{
Student[i].name = parts[0];
Student[i].surname = parts[1];
}
}
static void GetName(ref StudentDetails[]Student,ref string[]parts)
{
for(int i=0;i
除非您添加以下内容:
static void GetName(ref StudentDetails[]Student, ref string[] parts)
{
Student = anotherStudentArray ; // Here the ref param is really needed as you want to reassign Student to a new array instance
for (int i = 0; i < Student.Length; i++ )
{
Student[i].name = parts[0];
Student[i].surname = parts[1];
}
}
static void GetName(ref StudentDetails[]Student,ref string[]parts)
{
Student=anotherStudentArray;//这里确实需要ref参数,因为您要将Student重新分配给新的数组实例
for(int i=0;i
若要补充此答案,我建议阅读POCO并将其用作数据存储。若要补充此答案,我建议阅读POCO并将其用作数据存储。