2015-05-06 85 views
0

我們通過列表和子列表來查找列表。 我想在列表中刪除列表中的第一個子列表。將元素從子列表中移除到列表中

這裏是我想要的一個例子:

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

這裏是我的代碼我試過,但它不工作...

public class RemovePositionList<E> { 

/** 
* 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> cursor = list.first(); 
    Position<E> cursor2 = subList.first(); 
    while(cursor != null && cursor2 != null){ //comprobamos que ningun elemento es null 
     if(cursor.element().equals(cursor2)){ 
      list.remove(cursor); 
     } 
     else{ 
      list.next(cursor); 
      list.next(cursor2); 
     } 
    } 
    } 
} 

感謝您的幫助...

+0

什麼位置和PositionList?你在寫自己的迭代器嗎? – Joel

回答

0

我不知道如果我正確的,但我認爲錯誤是在if()條件,而不是

if(cursor.element().equals(cursor2)) 

它不應該是

if(cursor.element().equals(cursor2.element())) 

.............. :)

+0

沒有工作......這個錯誤:顯示java.lang.NullPointerException ****錯誤檢測 \t在removeSubList.RemovePositionList.removeSubList(RemovePositionList.java:22) \t在removeSubList.ListUtils.do_check(Tester.java:306 ) \t at removeSubList.Tester.main(Tester.java:42) 線程「main」中的異常java.lang.Error:錯誤的結果。 (Tester.java:42) – Javi

+0

當你得到一個nullPointerException時,這意味着你沒有初始化de對象或在其他的單詞的對象是空的,所以檢查你的代碼,並找到你是否沒有留下一個對象爲null這是一個例子:Test test1;但如果你沒有初始化它,test1將是空的,所以你應該嘗試像這樣:):test test1 = new Test(); – Arturouu

0

我採取了不同的方法使您提供的樣本輸入。它適用於所有情況。

public static void main(String[] args) { 
    Integer listElements[] = {3,2,3,4,7}; 
    Integer subListElements[] = {3,7}; 

    List<Integer> list = new LinkedList<Integer>(Arrays.asList(listElements)); 
    List<Integer> subList = Arrays.asList(subListElements); 
    System.out.println(removeSubList(list, subList)); 
} 

private static List<Integer> removeSubList(List<Integer> list, List<Integer> subList){ 
    if(list == null || list.isEmpty() || subList == null){ 
     return list; 
    } 
    for(Integer item : subList){ 
     list.remove(item); 
    } 
    return list; 
} 
+0

我可以做到沒有迭代器? – Javi

+0

@Javi我已經更新了我的答案以供每個人使用。 – Sridhar