簡體   English   中英

從數組中刪除中間元素

[英]Remove the middle elements from an Array

我試圖解決這個問題:“如果數組長度是奇數,則刪除中間元素,如果長度是偶數,則刪除中間兩個元素”

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

}
}

正如其他人已經提到的,你不能只從現有數組中刪除中間元素。 但是你可以簡單地計算中間的“開始”和“結束”(如果你想這樣稱它),然后將中間的左右部分復制到結果數組中:

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

它可能需要一些額外的邊界檢查,但我不認為有任何更有效的方法來刪除數組的中間元素。

  • 您無法從數組中刪除元素,您需要從原始數據中創建新副本 ,然后返回結果,或將原始數組的引用更改為新副本。

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

    }

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

}}

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM