Удалите средние элементы из массива

Я пытаюсь решить эту проблему: "Удалите средний элемент, если длина массива нечетна, или два средних элемента, если длина четна"

Я нашел "круглый" способ решить эту проблему с помощью ArrayList, но я хочу сделать то же самое, используя только массивы. Это мой код, используя 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</integer></integer>
4 ответа

Как уже упоминалось, вы не можете просто удалить средние элементы из существующего массива. Но вы можете просто рассчитать "начало" и "конец" середины (если вы хотите так называть), а затем скопировать левую и правую части середины в массив результатов:

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="" resultarray[index]="myArray[i];" index++;="" printarray(resultarray);="" private="" static="" void="" printarray(int[]="" array)="" for(int="" system.out.println("array["="" +="" "]=" + array[i]);
     }
    }
    </code>

    }


Если вам просто нужно удалить один элемент из массива (не arraylist), и вы знаете его индекс, вы можете использовать библиотеку ArrayUtils

<a href="http://commons.apache.org/proper/commons-lang/javadocs/api-2.6/org/apache/commons/lang/ArrayUtils.html#remove%28int%5B%5D,%2****%29%23remove(int%5B%5D," rel="nofollow noreferrer" target="_blank">ArrayUtils.remove</a>

и просто делай

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


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

licensed under cc by-sa 3.0 with attribution.