如何调试不起作用的if语句?

时间:2017-01-13 14:47:17

标签: java

import java.util.*;

public class ass {

    public static void main(String[] args) {
        // TODO Auto-generated method stub 

        String[]c={"sid","is","cool"};
        List<String>list1=new ArrayList<String>();

        for(String w:c){
            list1.add(w);
        }
        String[]q={"is"};
        List<String>list2=new ArrayList<String>();
        for(String t:q){
            list2.add(t);
        }

        EditList(list1,list2);

        for(int i=0;i<list1.size();i++){
            System.out.printf("%s ", list1.get(i));
        }
    }

    public static void EditList(Collection<String>l1, Collection<String>l2){
        Iterator<String>it=l1.iterator();
        while(it.hasNext()){
            if(l2.contains(it.next()));
            it.remove();
        }
    }
}

在这个程序中我有两个列表。我想从第一个列表中删除第一个和第二个列表中常见的项目并打印出来。我不想要解决方法或任何其他代码建议。有人可以解释为什么我的代码不起作用吗?

我正在关注新波士顿的教程。

2 个答案:

答案 0 :(得分:5)

下面:

if(l2.contains(it.next()));
    it.remove();

if 之后的分号是真实语句。 因此it.remove()始终发生;好像......如果没有那个!

因此,真正的答案是:始终始终使用

if (){ 
  stuff 
}

......即使是单一陈述!循环相同!

答案 1 :(得分:1)

public static void EditList(Collection<String>l1, Collection<String>l2){
    Iterator<String>it=l1.iterator();
    while(it.hasNext()){
        String current=it.next();
        if(l2.contains(current)){
               i1.remove(current); // assuming u wish to remove from l1
        }

    }

}