PositionList错误删除元素

时间:2014-09-28 19:29:06

标签: java list

我在Java中有一个algoritm问题。 这个算法必须从列表中删除元素,但只能删除一次(第一个元素)。 我试过这个,我编译好但运行时遇到问题......

    /**
 * Returns in "list" the previous content of "list" after removing "subList" if it is present in "list"
 *
 * @param  list     (input/output)  The list where search and remove the first occurrence of "subList"
 * @param  subList  (input)         The sub list to search within "list"
 */

public void removeSubList(PositionList<E> list,PositionList<E> subList) {
    Position<E> cursor1 = list.first();
    Position<E> cursor2 = subList.first();
    while(cursor1 != null && cursor2 != null)
        if(cursor1.element()==cursor2.element()){
            Position<E> borrar = cursor1;
            cursor1=list.next(cursor1);
            cursor2=list.next(cursor2);
            list.remove(borrar);
        }


}

这就是我想要的控制台输出:

removeSubList([3,2,3,4,5,3],[3])[2,3,4,5,3]

removeSubList([2,3,4,5,3,4],[3,4])--------&GT; [2,5,3,4]

removeSubList([3,2,3,4,7],[3,7])--------&GT; [3,2,3,4,7]

removeSubList([3,2,3,4,5,3],[])--------&GT; [3,2,3,4,5,3]

removeSubList([],[3,7])--------&GT; []

removeSubList(NULL,[3,7])--------&GT;空

removeSubList([3,2,3,4,5,3],NULL)--------&GT; [3,2,3,4,5,3]

只删除第一个。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

首先我想问一个问题: 输出正确吗?

removeSubList([3,2,3,4,7],[3,7])--------> [3,2,3,4,7]

不应该是[2,3,4]吗?

好吧,让我们看看那段代码:

 while(cursor1 != null && cursor2 != null)
    if(cursor1.element()==cursor2.element()){
        Position<E> borrar = cursor1;
        cursor1=list.next(cursor1);
        cursor2=list.next(cursor2);
        list.remove(borrar);
    }
  1. 如果元素相等,那么你正在选择下一个,但是当它们不是那么时,无限循环?你应该总是得到下一个元素,而不仅仅是当元素相等时。

  2. 我不确定'=='是检查等同于某事的最佳方法,请尝试.equals()。

  3. 接下来的事情是,你不应该修改(尤其是删除某些东西)你正在迭代的列表。请创建将成为结果列表的新列表。

  4. 请解决这些问题,如果您还有其他问题,请描述一下并写下您正在获得的输出。