数组删除中间术语

时间:2018-01-11 23:30:02

标签: java arrays

对于我的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;
}

3 个答案:

答案 0 :(得分:0)

这是因为当你接受arrayE.length / 2时它返回的int将是2.然后你减去 - 1为2。实际上你有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;
        }

答案 1 :(得分: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;
}

尝试自己找出偶数编号!

答案 2 :(得分:0)

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