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

1

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

Я нашел "круглый" способ решить эту проблему с помощью 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<myArr.length;i++){
        outputArray.add(myArr[i]);
    }
    outputArray.remove(midEl);
    outputArray.remove(midElMinusOne);


    System.out.print(outputArray);

}
}
Теги:
arrays
arraylist
element

4 ответа

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

Это может потребовать проверки дополнительных границ, но я не думаю, что есть более эффективный способ удаления среднего элемента (ов) массива.

  • 0
    Спасибо за ваш ответ! :)
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]);
        }
    }
    

    }

  • 0
    здорово! Спасибо вам большое! Хороший способ объяснения, теперь я понимаю!
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);

}}
0

Если вам просто нужно удалить один элемент из массива (не 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);
  • 0
    Я вижу, хороший метод, но я не знаю, какой класс следует импортировать, чтобы использовать этот метод. Я пытался с java.util. *; но это не помогло ...

Ещё вопросы

Сообщество Overcoder
Наверх
Меню