为什么这个if语句总是返回true?

时间:2014-05-30 08:15:38

标签: java string arraylist

假设:list = [“be”,“be”,“is”,“not”,“or”,“question”,“that”,“the”,“to”,“to”]

public static void removeDuplicates(ArrayList<String> list) {
    for(int i = 0; i < list.size(); i++) {
        String s = list.get(i);
        for(int j = 0; j < list.size() - 1; j++) {
            String s2 = list.get(j);
            if(s2.equals(s)); {
                list.remove(j + 1);
            }
        }
    }
}

当我调试它时,s2.equals(s)似乎一直返回true,当s2和s根本不相等时。我做错了什么?

4 个答案:

答案 0 :(得分:3)

删除分号:

        if(s2.equals(s)); {

应该是

        if(s2.equals(s)) {

编辑:解释:在您的代码中,if之后有一个空语句,因此无论比较结果如何,都将执行该块:

public static void removeDuplicates(ArrayList<String> list) {
    for(int i = 0; i < list.size(); i++) {
        String s = list.get(i);
        for(int j = 0; j < list.size() - 1; j++) {
            String s2 = list.get(j);
            if(s2.equals(s))
                ; // <-- conditional
            {     // <-- unconditional
                list.remove(j + 1);
            }
        }
    }
}

答案 1 :(得分:1)

你也在测试自己的元素,你有一个分号有效地删除了if。你可能想要

if (i!=j && s2.equals(s)) {

答案 2 :(得分:1)

您应该从i+1开始第二个循环,因为在j循环的每次迭代中,i值将等于j并且它将满足等于条件....

public static void removeDuplicates(ArrayList<String> list) 
{
  for(int i = 0; i < list.size(); i++) 
  {
    String s = list.get(i);
    for(int j = i+1; j < list.size(); j++) 
    {
        String s2 = list.get(j);
        if(s2.equals(s))             
        {   
           list.remove(j + 1);
           j--; //Subtract one as j+1 element is removed from list and index changes
        }

    }
  }
}

答案 3 :(得分:1)

你有一个额外的分号。请执行以下操作:

if(s2.equals(s))             
    list.remove(j + 1);

这个改变应该有效。