数组删除中间术语

问题描述 投票:0回答:3

对于我的AP计算机科学AB课程,我们需要制作一个能够从数组中删除中间项的程序,并且我的代码会不断地返回一个不合适的地方0我该如何解决这个问题?例如:[6,2,10,2,0]当所需输出为[6,2,2,0]时返回[6,0,2,0]

if (arrayE.length % 2 == 0) {
  int[] newArray = new int[arrayE.length - 2];

  for (int i = 0; i < (arrayE.length / 2) - 1; i++) {
    newArray[i] = arrayE[i];
  }
  for (int i = (arrayE.length / 2); i < newArray.length; i++) {
    newArray[i] = arrayE[i + 2];
  }
  arrayE = newArray;
} else if (arrayE.length % 2 != 0) {
  int[] newArray = new int[arrayE.length - 1];

  for (int i = 0; i < (arrayE.length / 2) - 1; i++) {
    newArray[i] = arrayE[i];
  }
  for (int i = (arrayE.length / 2); i < newArray.length; i++) {
    newArray[i] = arrayE[i + 1];
  }
  arrayE = newArray;
}
java arrays
3个回答
0
投票

这是因为当你接受array.length / 2时,它返回的int将是2.然后你减去 - 两个为1。实际上你有2 - 1.所以在这种情况下你的阵列基本上是

for(int i = 0; i < 1; i++){
  System.out.println("ran");
}

那只打印出来。错误是您实际上从未修改过第二个索引。删除-1。

这段代码应该可以正常工作

if (arrayE.length%2!=0)
        {
            int[] newArray = new int[arrayE.length - 1];

            boolean pastMidPoint = false;
            for(int i = 0; i < arrayE.length; i++){
                if(i == (arrayE.length / 2)) {
                    pastMidPoint = true;
                    continue;
                }
                if(!pastMidPoint)
                    newArray[i] = arrayE[i];
                if(pastMidPoint)
                    newArray[i - 1] = arrayE[i];
            }
            arrayE = newArray;
        }

0
投票

因此,如果您只想从数组中删除中间项,可以尝试以下方法。在奇数编号的数组的情况下:

public static int[] getOddLengthArray(int arrayE[]) {
     int size = arrayE.length;
     int indexToRemove = ((size+1)/2)-1;
     int[] newArray = new int[size-1];
     int newArrayIndex = 0;
     for(int oldArrayIndex=0;oldArrayIndex<size-1; oldArrayIndex++) {
         if(oldArrayIndex!=indexToRemove) {
             newArray[newArrayIndex] = arrayE[oldArrayIndex];
             newArrayIndex++;
         }
     }
     return newArray;
}

试着为自己找出偶数!


0
投票

代码中的错误是这个表达式:(array.length / 2) - 1对于“奇数”情况,您需要在两个循环中使用相同的边界array.length / 2。

© www.soinside.com 2019 - 2024. All rights reserved.