假设: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根本不相等时。我做错了什么?
答案 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);
这个改变应该有效。