2014-10-06 38 views
1

對於編程任務,我們被要求創建一個有序的矢量類。我的問題在於我的「leftShift」功能。用於插入有序矢量的左/右移

我的第一個代碼,編譯得很好,但是當用測試程序文件運行時,會遇到索引越界異常。

**private E LeftShift(int index){ 
     E Temp = arrayFirst[index]; 
     for (int x = index ; x<= size -1 ; x++){ 
      arrayFirst[x] = arrayFirst[x+1]; 
     } 
     return Temp;** 

這讓我頭疼的一個良好的數額,但一些試驗和錯誤後,我只是卸下了=得到它才能正常工作。

**private E leftShift(int index){ 
     E Temp = arrayFirst[index]; 
     for (int x = index ; x < size -1 ; x++){ 
      arrayFirst[x] = arrayFirst[x+1]; 
     } 
     return Temp;** 

雖然它的工作,我想有更好的理解,爲什麼我的第一個代碼會崩潰,是什麼讓第二工作沒有錯誤。任何解釋非常感謝!

+0

是否希望在'leftShift'被調用後該向量的最後兩個元素相同? – ajb 2014-10-06 19:55:05

回答

2

在第一個代碼塊中,x將迭代,直到x <= size - 1爲假(直到x > size - 1)。

因此在最後的迭代x = size - 1。在循環中,在最後一次迭代中,您訪問arrayFirst[x+1],即arrayFirst[(size - 1) + 1] = arrayFirst[size]

這是超出界限。在第二個代碼塊中不會發生此錯誤,因爲您在x == size - 1時停止,因此不會發生此錯誤迭代。