2014-10-31 113 views
0

我正在做一個程序誰比較兩個XML文檔,並比較名稱標籤,以找到重複的數據。當發現我添加在一個數組列表中。但它增加了兩次。我尋找一些錯誤,但我無法看到。還有就是代碼:Arraylist添加兩次相同的信息

public void verificaChave(){ 
    NodeList v1 = this.doc1.getElementsByTagName("name"); 
    NodeList v2 = this.doc1.getElementsByTagName("name"); 
    for(int i= 0; i<v1.getLength();i++) 
    { 
     found = false; 
     for(int j = 0; j<v2.getLength();j++) 
     { 
      if(v1.item(i).getTextContent().equalsIgnoreCase(v2.item(j).getTextContent())) 
      { 
       if(!found) 
       {       
        found = true; 
       } 
       else 
       { 
        repetiu.add(v1.item(i).getTextContent()); 
       }  
      }  
     } 
    } 
    this.saveRepeat(); 
} 
+0

也許我在這裏,但代碼沒有意義:1)如果你沒有在任何地方使用它,你爲什麼需要'找到'? 2)'v1'和'v2'指向完全相同的對象 - 也許你打算聲明'v2'指向'doc2'? 3)你有n^2次迭代:我只能猜測你想要第二個循環(假設它運行在相同的輸入上)從'j = i + 1;'開始,以便不會多次比較相同的對象。 – alfasin 2014-10-31 03:48:06

+0

你是絕對正確的,關於發現我做了這段代碼來查看兩個XML文檔,但知道我只是在比較一個,我做了一些更改,但我忘了這一個,我又改了它,它的工作。非常感謝!! – 2014-10-31 04:04:51

回答

0

這裏的問題似乎是,你實例化兩個完全一樣的NodeLists - v1和v2 - 然後用一個for循環,通過V1和一個單獨的迭代,嵌套的for循環遍歷v2。根本沒有理由讓v1存在,即使你不是指兩個NodeLists都指向同一個文檔,我也無法想象你想在這裏嵌套迭代的情況。

此外,你有一個布爾標誌找到,但你永遠不會真的使用該值 - 你的意思是使用它作爲一個哨兵值的地方?另一點 - 如果你永遠不會將它設置爲false,那麼檢查是否找到== false是沒有意義的。如果將v1.item(i).getTextContent()。equalsIgnoreCase(v2.item(j).getTextContent()))設置爲true,那麼它就不那麼容易混淆了。

+0

是的,我看到我做錯了,它的工作知道,非常感謝!我是編程新手,感謝花時間幫助我! – 2014-10-31 04:09:28

+0

@GilsonFonseca沒問題!如果有幫助,請繼續並單擊複選標記以將其指定爲您選擇的答案。 – furkle 2014-10-31 04:15:49

相關問題