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回答

liuyubobobo

2020-01-31

for(int i = index; i < size; i++) 
    data[i] = data[i+1];


这段话 i 最多取到 size - 1,

然后访问 data[i + 1],相当于是访问 data[size],越界。


使用一个小的测试用例,比如只有 3 个元素的数组,实际测试一下你的代码,看看代码内部发生了什么?到底在什么情况下产生了数组越界?debug 是程序员的基本功,静下心来慢慢调试,找到自己代码的问题,想明白自己的想法和程序的实际执行过程哪里不一致,进步就发生在这个过程中哦。


继续加油!:)

0
1
充电两分钟
非常感谢!
2020-01-31
共1条回复

玩转数据结构

动态数组/栈/队列/链表/BST/堆/线段树/Trie/并查集/AVL/红黑树…

6221 学习 · 1704 问题

查看课程