我在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]
只删除第一个。
感谢您的帮助。
答案 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);
}
如果元素相等,那么你正在选择下一个,但是当它们不是那么时,无限循环?你应该总是得到下一个元素,而不仅仅是当元素相等时。
我不确定'=='是检查等同于某事的最佳方法,请尝试.equals()。
接下来的事情是,你不应该修改(尤其是删除某些东西)你正在迭代的列表。请创建将成为结果列表的新列表。
请解决这些问题,如果您还有其他问题,请描述一下并写下您正在获得的输出。