1

我有一些作业要在 java 中实现双端队列系统。我创建了其他方法,它们通过了我的测试。但是,我在删除最后一个时遇到了问题。到目前为止我有这个;

//remove the element at the back of the deque
public int removeBack()
{
    int size = a.size();
    size--;

    if( size > 0 )
    {
        int last = a.get(size);
        last--;
        a.remove(last);
    }

    size = a.size();

    return size;
}

这是它失败的 JQuery 测试。

    Deque d = new Deque(1);
    d.insertBack(1);
    assertEquals(1, d.length());
    int b = d.removeBack();
    assertEquals(0, b);
    // java.lang.AssertionError: expected:<1> but was:<0>

有人有想法么?我真的看不出我在哪里出错了。

干杯

4

2 回答 2

1

你的代码是一团糟。

d.insertBack(1);   <---- you add one element.
assertEquals(0, d.length()); <--- length is expected to be 1
int b = d.removeBack();  <---- you remove one element, and return the new length (!)
assertEquals(1, b); <----- b = length after removing = 0

你可能打算做什么:

public int removeBack() {
    return a.remove(a.size() - 1); // Remove and return last element.
}

(注:标准是返回最后一个元素,不是列表大小,需要size()时可以通过查询。)

于 2013-03-20T16:44:38.690 回答
0

以下看起来很可疑:

    int last = a.get(size);
    last--;
    a.remove(last);

无论您期望ArrayList.remove(int)采用索引还是值(它采用索引),我都看不出这如何工作。

于 2013-03-20T16:40:50.827 回答