2017-08-27 44 views
-2

我已经实现了这两种方法来从正面和背面删除元素。我没能到哪我做错了,但我对任何一种方法ArrayList删除没有集合或导入

public T removefirst() { 
if (size == 0) { 
     return null; 
    } 
    T removed = backingArray[0]; 
    for (int i = 0; i < size(); i++) { 
     backingArray[i] = backingArray[i + 1]; 
    } 
    size--; 
    return removed; 
} 

public T removelast() { 

    if (size == 0) { 
     return null; 
    } 

    T removed = backingArray[size - 1]; 
    backingArray[size - 1] = null; 
    size--; 
    return removed; 


    } 
+3

它是如何失败?你做了什么调试?预期结果与实际结果有什么区别?我们需要更多信息。 – Carcigenicate

+0

在HW阵列中运行的Junit测试首先在元素[5]上有所不同; 预期:null Actual:5a – MLuser

+2

在'removefirst()'中,您正在使用size()方法调用作为循环限制而不是像其他地方那样使用size(成员字段访问)这是错误的,除非size()总是返回size。另外,如果'size()'恰好返回'backingArray'的确切大小,则会从'backingArray [i + 1]'中得到'ArrayIndexOutOfBoundsException'。 'removelast()'似乎对我很好;没有明显的错误脱颖而出... –

回答

0

在removeFirst方法失败的测试,修正为环。您需要运行至大小-1

for (int i = 0; i < size()-1; i++) { 
    backingArray[i] = backingArray[i + 1]; 
} 

removeLast假设按预期正常工作。