对于编程分配,我们被要求创建一个有序的矢量类。我的问题是关于我的" 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 :(得分:2)
在第一个代码块中,x
将迭代,直到x <= size - 1
为假(直到x > size - 1
)。
因此在最后的迭代x = size - 1
。在循环中,在最后一次迭代中,您访问arrayFirst[x+1]
,即arrayFirst[(size - 1) + 1] = arrayFirst[size]
。
这是出界的。第二个代码块中不会出现此错误,因为您在x == size - 1
时停止,因此不会发生此错误迭代。