从数组中删除中间元素

时间:2014-03-18 18:27:08

标签: java arrays arraylist element

我正在尝试解决这个问题:"如果数组长度为奇数,则删除中间元素;如果长度为偶数,则删除中间两个元素"

我找到了" round"使用ArrayList解决这个问题的方法,但我想只使用Arrays做同样的事情。这是我的代码,使用ArrayLists。

import java.util.*;
public class test{
public static void main (String[]args){
    ArrayList<Integer> outputArray = new ArrayList<Integer>();

    int [] myArr = {5,8,9,10,11,5};
    int midEl = myArr.length/2;
    int midElMinusOne = myArr.length/2 -1;
    for(int i=0;i<myArr.length;i++){
        outputArray.add(myArr[i]);
    }
    outputArray.remove(midEl);
    outputArray.remove(midElMinusOne);


    System.out.print(outputArray);

}
}

4 个答案:

答案 0 :(得分:2)

正如其他人已经提到的,你不能只从现有数组中删除中间元素。但是你可以简单地计算中间的“开始”和“结束”(如果你想这样称它),然后将中间的左右部分复制到结果数组中:

int middleStart = (myArr.length - 1) / 2;
int middleEnd = (myArr.length - 1) - middleStart;
int elementsToRemove = middleEnd - middleStart + 1;

int[] result = new int[myArr.length - elementsToRemove];
System.arraycopy(myArr, 0, result, 0, middleStart);
System.arraycopy(myArr, middleEnd + 1, result, middleStart, middleStart);

它可能需要一些额外的边界检查,但我认为没有更有效的方法来删除数组的中间元素。

答案 1 :(得分:1)

  • 您无法从数组中删除元素,您需要从原始创建新的副本,然后返回结果,或更改引用原始数组到新副本。

    public class Test
    {
        public static void main(String[] args)
        {
        int[] myArray = new int[]{1,2,3,4,5,6,7};
        boolean even = (myArray.length%2==0);
    
        int[] resultArray;
        if(even)
            resultArray = new int [myArray.length-2];
        else 
            resultArray = new int [myArray.length-1];
    
        int mid1 =  myArray.length/2;
        int mid2 = myArray.length/2 - 1;
    
        int index = 0;
        for(int i=0;i<myArray.length;i++)
        {
            if(even && (i==mid1 || i==mid2))
            {
                continue;
            }
            else if(!even && i==mid1)
            {
                continue;
            }
    
            resultArray[index] = myArray[i];
            index++;
        }
    
        printArray(resultArray);
    }
    
    private static void printArray(int[] array)
    {
        for(int i=0;i<array.length;i++)
        {
            System.out.println("array[" + i + "] = " + array[i]);
        }
    }
    

    }

答案 2 :(得分:0)

import java.util.*;
public class test{
public static void main (String[]args){


    int [] myArr = {5,8,9,10,11,5};
    int midEl = (myArr.length-1)/2;// array index start with 0   
     int j = midE1;
    if(myArr.length %2 ==0){
      myArr[j] = myArr[midE1+2];
      j++;
      midE1 = midE1+2;
    }   

 for(int i=midEl;i<myArr.length;i++){
        myArr[j] = myArr[i+1];
        j++;
    }
System.out.print(myArr);

}}

答案 3 :(得分:0)

如果你只需要从Array(不是arraylist)中删除一个元素,并且你知道它的索引就可以使用ArrayUtils库

  

ArrayUtils.remove

只是做

if(myArr.length%2==1)
ArrayUtils.removeElement(myArr, myArr.length/2);
else
{ArrayUtils.remove(myArr,myArr.length/2);
ArrayUtils.remove(myArr,myArr.length/2);