请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

removeFirst和removeLast提示数组下标越界

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 05:01:36
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 11:22:55

相似问题

登录后可查看更多问答,登录/注册

问题已解决,确定采纳
还有疑问,暂不采纳
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号