[英]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庫
而且只是做
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.