2014-10-31 65 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

相关问题