我正在尝试解决这个问题:"如果数组长度为奇数,则删除中间元素;如果长度为偶数,则删除中间两个元素"
我找到了" round"使用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);
}
}
答案 0 :(得分:2)
正如其他人已经提到的,你不能只从现有数组中删除中间元素。但是你可以简单地计算中间的“开始”和“结束”(如果你想这样称它),然后将中间的左右部分复制到结果数组中:
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);
它可能需要一些额外的边界检查,但我认为没有更有效的方法来删除数组的中间元素。
答案 1 :(得分: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]);
}
}
}
答案 2 :(得分: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);
}}
答案 3 :(得分:0)
如果你只需要从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);