我试图创建一个名为insertAt的方法,它接受3个参数(int index,int n,int value),这样如果我调用:
list.insertAt(2,4,98)在[12,42,8,934]的数组上,它现在应该存储[12,98,934].
list.insertAt(2,4,98)在[12,42,8,934]的数组上,它现在应该存储[12,98,934].
int index是我开始放置值的地方
int n是多少个值
int value是我想要放入的实际值或数字.
public class ArrayIntList { private int[] elementData; // list of integers private int size; // current # of elements in the list }
我尝试制作下面的方法,但我仍然坚持我所缺少的.如果你们可以帮助我,我会非常感激!
public void insertAt(int index,int value) { if (index < 0 || index > size || n < 0) { throw new IllegalArgumentException(); } size = size + n; for (int i = 0; i < n; i++) { elementData[(size - 1) - i] = elementData[(size - n) + i]; elementData[n + i] = value; } }
解决方法
示例中的数组只包含4个值,但您尝试添加4个值.由于数组具有固定长度,因此这是不可能的.所以你必须创建一个长度为n的新数组:
int[] newElements = new int[size + n];
然后,您必须将所有元素从0复制到索引,并将索引元素从旧版本复制到新数组:
System.arraycopy(elementData,newElements,index); System.arraycopy(elementData,index,index + n,size - index);
然后你必须将新元素插入数组n次:
Arrays.fill(newElements,value);
最后,您必须将新数组重新分配给旧实例1并设置新大小:
elementData = newElements; size += n;
我已经使用了JDK中的一些辅助方法,比如System.arraycopy,它具有以下签名:
void arraycopy(Object src,int srcPos,Object dest,int destPos,int length);
它将src中的元素从srcPos复制到srcPos长度,复制到dest,从destPos到destPost长度
Array.fill也是一个很好的帮手,具有以下签名:
void fill(int[] a,int fromIndex,int toIndex,int val)
它使用值val从fromIndex到toIndex填充数组a