给我们一个硬件,以更改使用2d数组的C#中的先前硬件,而不是使用2d数组,我们使用一个数组列表,该列表具有在称为“学生”的对象中声明的变量。
我想使用一种方法来计算学生的最佳成绩;但是,该方法给我以下错误和警告:
错误:
CS0161'Form1.Calc_HighestMarkOutput(int)':并非所有代码路径都返回一个值。
警告:
CS0162检测不到代码。
在用户输入的数组列表中(通过使用重载构造函数):
学生姓名,数学标记,英语标记,马耳他标记,电子邮件地址。
由于在该方法中我要归还所有学生获得的3门科目中的3个最高分,因此我决定返回一个数组。可以通过selectedindex在主程序中的临时数组进行访问。
请帮助我找到问题。
在此先感谢
public int[] Calc_HighestMarkOutput(int HighestMarkIndex)
{
int[] HighestMarkOutput = new int[3];
int HighestMarkMaths = 0;
int HighestMarkEnglish = 0;
int HighestMarkMaltese = 0;
int TMPHighestMarkMaths = 0;
int TMPHighestMarkEnglish = 0;
int TMPHighestMarkMaltese = 0;
for (int i = 0; i < myStudents.Count; i++) //a loop through an array list.
{
if (myStudents[HighestMarkIndex].Maths_Result > HighestMarkMaths)
{
TMPHighestMarkMaths = myStudents[HighestMarkIndex].Maths_Result;
HighestMarkMaths = TMPHighestMarkMaths;
}
if (myStudents[HighestMarkIndex].English_Result > HighestMarkEnglish)
{
TMPHighestMarkEnglish = myStudents[HighestMarkIndex].English_Result;
HighestMarkEnglish = TMPHighestMarkEnglish;
}
if (myStudents[HighestMarkIndex].Maltese_Result > HighestMarkMaltese)
{
TMPHighestMarkMaltese = myStudents[HighestMarkIndex].Maltese_Result;
HighestMarkMaltese = TMPHighestMarkMaltese;
}
HighestMarkOutput[0] = HighestMarkMaths;
HighestMarkOutput[1] = HighestMarkEnglish;
HighestMarkOutput[2] = HighestMarkMaltese;
return HighestMarkOutput;
}
答案 0 :(得分:1)
您遇到错误,因为返回语句在循环内部。如果列表为空,则return语句将永远不会执行。此外,您仅在循环完成后才知道结果。因此,请将返回语句放置在循环之后。
由于此方法的目的是查找最高分数,因此将这样的索引作为参数传递给例程毫无意义。
使用foreach
比for
更容易,因为您不必处理索引。
返回包含结果的未命名学生,而不是返回数组。您可以删除无用的临时变量。
public Student Calc_HighestMarkOutput()
{
var result = new Student(); // You also might have to add a default constructor.
foreach (Student student in myStudents) {
if (student.Maths_Result > result.Maths_Result) {
result.Maths_Result = student.Maths_Result;
}
if (student.English_Result > result.English_Result) {
result.English_Result = student.English_Result;
}
if (student.Maltese_Result > result.Maltese_Result) {
result.Maltese_Result = student.Maltese_Result;
}
}
return result;
}
您还可以使用Math.Max
简化查找最大值的步骤
foreach (Student student in myStudents) {
result.Maths_Result = Math.Max(result.Maths_Result, student.Maths_Result);
result.English_Result = Math.Max(result.English_Result, student.English_Result);
result.Maltese_Result = Math.Max(result.Maltese_Result, student.Maltese_Result);
}
通过这些重构,该方法从22行(不包括空行和仅包含大括号的行)缩减为7行。