2012-08-07 110 views
1

嗨,我正在進行等級計算。我的問題在於如果字符串數組的長度比int數組更長,它會跳過最後2個等級。 例如:在C中傳遞數組#

int[] unit = new int[] {1,-3,3,4}; 
string[] letter_grade = new string[] {"A", "B","B","W","D","F"}; 

但如果int數組比字符串數組更長的長度它不工作的投擲的錯誤索引是該數組的範圍之外。

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 
    } 
} 
+2

所以你試圖訪問一個超出界限的索引。問題是什麼? (請注意'i'在範圍內[[0,unit.length]'..) – 2012-08-07 22:54:58

回答

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]); 
0

你不能只檢查數組項是空的,因爲你會出數組的邊界,並出現空檢查之前,你會得到一個異常。

我會檢查每個迭代的數組的長度......

for (int i = 0; i < unit.Length; i++) 
{ 
    if (currentArray.Length < i - 1) { break; } 
    // other code... 
} 
0

我認爲在你的情況下,元素的數量永遠不會很大,因此性能不會是一個問題。所以我認爲你應該使用List而不是數組。對於數組,每次更改某些邏輯或添加其他功能時都必須插入檢查。

0

foreach loop最適合您的scenerio。

foreach (string s in letter_grade) 
    { 
     entrygot = findGpaListentry(s); 
     if (entrygot != null) 
     { 
     //some code calculation 
     } 
}