对于编程任务,我们被要求创建一个有序向量类。我的问题是在我的“ 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;**


尽管它确实起作用,但我想更好地了解我的第一个代码为什么会崩溃以及什么使第二个代码正确运行。任何解释,不胜感激!

最佳答案

在第一段代码中,x将迭代直到x <= size - 1为false(直到x > size - 1)。

因此,在最终迭代x = size - 1上。在循环中,在最后一次迭代中,您访问arrayFirst[x+1],即arrayFirst[(size - 1) + 1] = arrayFirst[size]

这是超出范围的。在第二个代码块中不会发生此错误,因为您在x == size - 1时停止,因此不会发生此错误的迭代。

10-06 05:52