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