2016-04-06 24 views
-2

我在這裏做錯了什麼,會使index = -1?當我將索引設置爲只有> 0時,它將只返回時間數組中的最後一個元素,而不管輸入的字母。爲什麼範圍匹配循環會錯過邊界條件?

char[] lastNameLetterArr = { 'a', 'e', 'j', 'p', 't' }; 
string[] timeSlotArr = { TIME5, TIME1, TIME2, TIME3, TIME4 }; 
int index; 
index = lastNameLetterArr.Length - 1; 
while (index > 0 && lastNameLetterCh < lastNameLetterArr[index]) 
    --index; 
timeStr = timeSlotArr[index]; 
+0

TIMESTR已被宣佈爲在【什麼是IndexOutOfRangeException代碼 – bloop

+3

可能的複製一個字符串變量較早,我該怎麼辦修復它?](http://stackoverflow.com/questions/20940979/what-is-indexoutofrangeexception-and-how-do-i-fix-it) –

+0

@MarkM在代碼中聲明的一個字符變量。這個變量拉動學生姓的第一個字母,當在上面的數組中搜索時,應該通過timeStr變量輸出一個時間片 – bloop

回答

1

一個辦法讓你的指數走一路負1是設置lastNameLetterCh大寫字母。他們的UNICODE代碼都低於代碼a,所以你的循環只有在達到-1時纔會停止。

要解決此問題,轉換lastNameLetterCh開始搜索前,小寫:

lastNameLetterCh = char.ToLower(lastNameLetterCh); 
+0

是的,我之前在我的代碼中的數據輸入驗證之後轉換了lastNameLetterChar – bloop

+0

@bagorb只要'lastNameLetterCh'是一個字母,您的代碼將永遠不會遇到否定索引([demo](http://ideone.com/gsMby4) ) – dasblinkenlight

相關問題