JAVA数组移位

来源:百度知道 编辑:UC知道 时间:2024/05/22 00:31:26
int[] array = {0,1,2,3,4,5,6,7,8,9};
对这个数组某个位置开始后面的元素向后退一下,改为之便为默认值。比如从第五个开始后退,变成array{0,1,2,3,0,5,6,7,8,9},不用集合和util包Array,我写的是下面的代码,但是老有下标越界异常,为什么?
从第k位置开始
for(int i = 0;i < array,length-k-2;i++){
array[array.length-i] = array[array.length-i-1]
}
晕,问的是有点瑕疵
我想把array = {0,1,2,3,4,5,6,7,8,9}变成array = {0,1,2,3,0,4,5,6,7,8};

当i = 0时,也就是初始条件
array[array.length - i]越界

我看不懂,你到底是在平移数组元素还是把指定下标的元素变成默认值?第五个元素原来是4你怎么把它变成0了?

下标越界是肯定的。数组一旦被定义,长度就是不变的。与其说是平移,你这个其实是插入操作,在指定的下标插入默认值。一旦插入新元素,数组的元素个数会变长,但这是不允许的,所以肯定会有下标越界异常。

如果你真的是要插入一个默认元素的话你无法在原来的数组上进行操作,只能声明一个新的数组,长度比原来数组长1,然后把旧的元素复制到新的数组,插入默认值,然后再把array的引用指向新数组。可以这样:

int[] array={0,1,2,3,4,5,6,7,8,9};
int[] temp=new int[array.length+1]; //

int k; //k为指定下标,假设已知

for(int i=0;i<k;i++)
temp[i]=array[i]; //复制下标前的元素
temp[k]=0; //设置默认值
for(int i=k;i<array.length;i++)
temp[i+1]=array[i]; //复制下标后的元素

array=temp; //改变数组引用