请稍等 ...
×

采纳答案成功!

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

数组添加元素这里不太懂

private int[] data;
//容量
private int size;

//构造函数,传入数组的容量capacity构造Array
public Array(int capacity){
	data = new int[capacity];
	size=0;
}
// 无参数的构造函数,默认数组的容量capacity=10
public Array(){
	this(10);
}
//获取数组的容量
public int getCapacity(){
	return data.length;
}
//获取容量
public int getSize(){
	return size;
}
//数组是否为空
public boolean isEmpty(){
	return data==null;
}

//向所有元素前添加一个新元素
public void addFirst(int e){
	add(0,e);
}
//向所有元素后添加一个新元素
public void addLast(int e){
	add(size,e);
}
//在index索引的位置
插入一个新元素e
public void add(int index,int e){
	System.out.println("add");
	if(size==data.length){
		throw new IllegalArgumentException("容量已满");
	}
	if(index<0 || index>size){
		throw new IllegalArgumentException("index<0 or index>size");
	}
	for(int i=size-1;i>=index;i--){
		System.out.println("1add");
		System.out.println("===>"+i);
		data[i+1]=data[i];
	}
	data[index]=e;
	size++;
}

}

为什么进入不了for循环

还有我不明白size-1为什么要-1
size是容量

正在回答

1回答

liuyubobobo 2018-11-18 12:33:09

整个数组一共有size个元素,最后一个元素的索引为size - 1。


这个循环从最后一个元素开始(data[size - 1]开始),将其前面,直到index位置的元素,都向后挪一个位置,腾出空间,给新加入的元素。这个过程,请再复习课程2-3小节,从4:38开始的动画演示:P')


在第一次调用,或者待添加元素放到整个数组末尾,即index == size的时候,这个循环是进不去的。可以想一下,此时循环开始的条件是i = size - 1,而循环进行的条件是 i >= index(此时为size),初始,i就小于index了,所以循环进不去。


这也非常好理解,当我们要把新元素添加到数组的最后一个位置时,是不需要挪动数组的任何一个元素,给新元素腾位置的,直接把新元素放到当前数组的末尾就好。即此时直接执行data[index] = e,此时的index = size。


加油!:)

1 回复 有任何疑惑可以回复我~
  • 提问者 慕粉3884565 #1
    非常感谢!
    回复 有任何疑惑可以回复我~ 2018-11-18 17:46:04
  • 老师您好,我有个问题,你这里的size是当前元素的个数,而不是capacity对吧?为什么在
    if(index<0 || index>size){
    	throw new IllegalArgumentException("index<0 or index>size");
    	}
    if里的条件不是index > data.length?
    因为如果index > size, 我们直接向data[index]里添加元。.然后再加一个if(index > size)的情况。
    回复 有任何疑惑可以回复我~ 2019-02-03 06:43:04
  • 参考这里看能不能理解我们设计的动态数组到底是如何使用的?:)https://coding.imooc.com/learn/questiondetail/72250.html 加油!
    回复 有任何疑惑可以回复我~ 2019-02-03 09:41:04
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信