对于我的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;
}
这是因为当你接受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;
}
因此,如果您只想从数组中删除中间项,可以尝试以下方法。在奇数编号的数组的情况下:
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;
}
试着为自己找出偶数!
代码中的错误是这个表达式:(array.length / 2) - 1对于“奇数”情况,您需要在两个循环中使用相同的边界array.length / 2。