java里删除数组第3个元素并输出

老师布置的作业要求自己写算法我将下标arr[3]和最后一个元素arr[arr.length-1]作交换以后再进行数组缩容为什么输出结果不该是2,6,4,5,7而是2,6,... 老师布置的作业 要求自己写算法 我将下标arr[3]和最后一个元素arr[arr.length-1]作交换以后再进行数组缩容 为什么输出结果不该是 2,6,4,5,7 而是2,6,7,4,5?
不好意思,我打错了。是arr[2] 不是 arr[3]
如果用System.arraycopy方法,是不是得分别写两段代码?
用System.arraycopy方法先将2和6复制到新数组中来 ,再用System.arraycopy方法将4,5,7再复制到新数组中来。可是这样写输出的时候会报错。各位大虾该怎么用System.arraycopy方法写呢?
展开
 我来答
百度网友324204d
2017-02-10 · TA获得超过648个赞
知道小有建树答主
回答量:380
采纳率:85%
帮助的人:297万
展开全部

你的问题在于只进行了一次元素交换,应该写一个循环,把指定位置的元素移到数组末尾,这样再进行缩容就可以了。代码不写了,我来给你说System.arraycopy的写法。废话不说,代码说话:



public class DeleteElementinArry {

public static void main(String[] args) {

int[] arr={2,6,8,4,5,8,6,5,4};
int[] res = deleteElement(arr,3);
System.out.println(Arrays.toString(res));
}


public static int[] deleteElement(int[] arr1,int index){

int[]  arr2 = new int[index];

int[] arr3=new int[arr1.length-index-1];

for (int i = 0; i < index; i++) {

arr2[i]=arr1[i];
}
for (int i = index+1; i < arr1.length; i++) {

arr3[i-index-1]=arr1[i];
}
int arr4[]=new int[arr2.length+arr3.length]; //定义一个长度为arr2加arr3长度的数组
System.arraycopy(arr2,0,arr4,0,arr2.length); //将数组arr2的元素复制到arr4中
System.arraycopy(arr3,0,arr4,arr2.length,arr3.length); //将数组arr3的元素复制到arr4中


return arr4;

}
追问

十分感谢大神的讲解,一针见血就点出了我的问题。如果使用交换的方法虽然可以删掉第三个元素,但是会改变原有数据。请教一下大神一段代码,我同学写的。我有点看不懂,我用红色的实线标出来了,麻烦大神了。

追答

要看懂这两句代码,你必须得理解arraycopy()方法参数的含义,看一下jdk的说明:

我来解释一下5个参数:

①:表示源数组②:从源数组复制开始的位置③:要复制的目标数组

④:从目标数组复制的位置⑤:源数组复制的长度

你再看两行代码:第一行就表示把从arr的0位置复制2位放在arr1从0开始的位置,此时arr1={2,6}。第二行表示把arr的从第3个位置的元素复制3位放在arr1的从第二位开始的位置,也就是给{2,6}后面再加{4,5,7}。那么此时arr1就是{2,6,4,5,7}了。

参数往方法里面套,很easy。

超级胜寒666
2017-02-10 · 超过22用户采纳过TA的回答
知道答主
回答量:50
采纳率:0%
帮助的人:25.6万
展开全部
public int[] deleteNumAtArray(int[] array,int index){
    int temp;
    for(int i = index;i<array.length-1;i++){
        temp = array[i];
        array[i] = array[i+1];
        array[i+1] = temp;
    }
    return Arrays.copyOf(array,array.length-1);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式