removeFirst和removeLast提示数组下标越界
来源:2-5 包含,搜索和删除
充电两分钟
2020-01-30
bobo老师我的remove操作是这样写的
public E remove(int index) {
if(index < 0 || index >= size)
throw new IllegalArgumentException("Remove failed.Index is illegal");
E res = data[index];
for(int i = index; i < size; i++)
data[i] = data[i+1];
size--;
data[size] = null;
if(size == data.length / 2)
resize(data.length / 2);
return res;
}
执行removeFirst和removeLast时编译器报数组下标越界错误,不是很理解为什么会越界
写回答
1回答
-
for(int i = index; i < size; i++) data[i] = data[i+1];
这段话 i 最多取到 size - 1,
然后访问 data[i + 1],相当于是访问 data[size],越界。
使用一个小的测试用例,比如只有 3 个元素的数组,实际测试一下你的代码,看看代码内部发生了什么?到底在什么情况下产生了数组越界?debug 是程序员的基本功,静下心来慢慢调试,找到自己代码的问题,想明白自己的想法和程序的实际执行过程哪里不一致,进步就发生在这个过程中哦。
继续加油!:)
012020-01-31
相似问题