Я пытаюсь решить эту проблему: "Удалите средний элемент, если длина массива нечетна, или два средних элемента, если длина четна"
Я нашел "круглый" способ решить эту проблему с помощью 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);
}
}
Как уже упоминалось, вы не можете просто удалить средние элементы из существующего массива. Но вы можете просто рассчитать "начало" и "конец" середины (если вы хотите так называть), а затем скопировать левую и правую части середины в массив результатов:
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);
}}
Если вам просто нужно удалить один элемент из массива (не 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);