在 C# 中传递数组
本文关键字:数组 | 更新日期: 2024-10-30 11:50:06
嗨,我正在研究成绩计算。我这里的问题是,如果字符串数组的长度比 int 数组长,它会跳过最后 2 个等级。前任:
int[] unit = new int[] {1,-3,3,4};
string[] letter_grade = new string[] {"A", "B","B","W","D","F"};
但是,如果 int 数组的长度比字符串数组的长度长,则其不工作,其抛出错误 Index 超出了数组的范围。
int[] unit = new int[] {1,-3,3,4,5,6,7};
string[] letter_grade = new string[] {"A", "B","B"};
所以我的问题如何让它同时适用于两者?
int length = unit.Length;
int no_units = length;
double totalGrade_Points = 0.0;
int totalno_units = 0;
totalGPA = 0;
for (int i = 0; i < unit.Length; i++)
{
entrygot = findGpaListentry(letter_grade[i]); //Index was outside the bounds of the array.
if (entrygot != null)
{
//some code calculation
}
}
对于数组索引,您必须很好地定义开始和停止条件。要访问两个数组,它们必须相等,或者在某些有效条件下进行比较。看看这个:
for(int i=0;i<unit.length;i++){
entrygot = findGpaListentry(letter_grade[i]);// only if letter_grade is valid under all values of i i.e unit.length
}
// either you have to check as if;
if(lenght_of_letter_grade < i-1)
//then access
entrygot = findGpaListentry(letter_grade[i]);
您不能只检查数组项是否为 null,因为您将超出数组的范围,并且在 null 检查发生之前将出现异常。
我会在每次迭代时检查数组的长度......
for (int i = 0; i < unit.Length; i++)
{
if (currentArray.Length < i - 1) { break; }
// other code...
}
我认为在您的情况下,元素的数量永远不会很大,因此性能不会成为问题。所以我认为你应该使用列表而不是数组。对于数组,每次某些逻辑更改或添加其他功能时,您都必须进行插入检查。
foreach
循环最适合您的场景。
foreach (string s in letter_grade)
{
entrygot = findGpaListentry(s);
if (entrygot != null)
{
//some code calculation
}
}