1

嗨,我正在研究成绩计算。我的问题是,如果字符串数组的长度比 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
  }
}
4

4 回答 4

0

你不能只检查数组项是否为空,因为你会超出数组的范围,并且在空检查发生之前你会得到一个异常。

我会在每次迭代时检查数组的长度......

for (int i = 0; i < unit.Length; i++)
{
    if (currentArray.Length < i - 1) { break; }
    // other code...
}
于 2012-08-07T22:56:26.327 回答
0

对于数组索引,您必须很好地定义开始和停止条件。要访问两个数组,要么它们必须相等,要么在某些有效条件下进行比较。看看这个:

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]);
于 2012-08-07T23:06:29.253 回答
0

我认为在您的情况下,元素的数量永远不会很大,因此性能不会成为问题。所以我认为你应该使用 List 而不是数组。对于数组,每次更改某些逻辑或添加其他功能时,您都必须进行插入检查。

于 2012-08-08T10:19:07.540 回答
0

foreach循环最适合您的场景。

    foreach (string s in letter_grade)
    {
      entrygot = findGpaListentry(s); 
      if (entrygot != null)
      {
         //some code calculation
      }
}
于 2012-08-08T10:23:54.633 回答