【问题标题】:Remove the middle elements from an Array从数组中删除中间元素
【发布时间】:2014-03-18 18:27:08
【问题描述】:

我正在尝试处理这个问题:“如果数组长度为奇数则删除中间元素,如果长度为偶数则删除中间两个元素”

我找到了使用 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);

}
}

【问题讨论】:

    标签: java arrays arraylist element


    【解决方案1】:

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

    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);
    

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

    【讨论】:

    • 感谢您的回答! :)
    【解决方案2】:
    • 你不能从数组中删除元素,你需要从原始中创建一个新的copy,然后返回结果,或者改变原始数组的引用到新副本。

      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]);
          }
      }
      

      }

    【讨论】:

    • 太棒了!非常感谢!很好的解释方式,现在我明白了!
    【解决方案3】:

    如果你只需要从 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);
    

    【讨论】:

    • 我明白了,不错的方法,但我不知道应该导入什么类才能使用此方法。我试过 java.util.*;但它没有帮助......
    【解决方案4】:
    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);
    
    }}
    

    【讨论】:

      猜你喜欢
      • 2011-10-31
      • 1970-01-01
      • 1970-01-01
      • 2022-01-13
      • 2016-03-08
      • 2017-09-13
      • 2017-12-22
      • 1970-01-01
      相关资源
      最近更新 更多