2014-03-19 79 views
0

我期望的結果是1 c 3 o。但只有1 c 3 o 5 c。 代碼有什麼問題?爲什麼這個ArrayList代碼得到一個錯誤?

ArrayList<String> A_array= new ArrayList<>(); 

A_array.add(0,"c"); B_array.add(0,1); 
A_array.add(1,"c"); B_array.add(1,2); 
A_array.add(2,"o"); B_array.add(2,3); 
A_array.add(3,"c"); B_array.add(3,4); 
A_array.add(4,"c"); B_array.add(4,5); 
A_array.add(5,"c"); B_array.add(5,6);  

for(int i=0;i<B_array.size()-1;i++) 
{ 
    for(int j=i+1;j<B_array.size();j++) 
    { 
     if(A_array.get(i)==A_array.get(j)) 
     { 
     B_array.remove(j);A_array.remove(j); 
     } 
    } 
} 
for(int i=0;i<B_array.size();i++) 
{ 
    System.out.println(B_array.get(i)+" "+A_array.get(i)); 
} 
+12

不使用''==比較字符串,使用'.equals() ' – Salah

+1

如果您要在遍歷整個列表的同時修改列表,則應該向後瀏覽其內容。 – Henrik

+0

預期結果背後的邏輯是什麼? –

回答

1

因爲你正在修改的陣列和刪除元素,那麼你應該更新索引,在這裏,我會建議使用迭代器,並使用iterator.remove

for (Iterator<String> iterator = B_array.iterator(); iterator.hasNext();) { 
    String value = iterator.next(); 
    if(equals) { 
     iterator.remove(); 
    } 
} 
1

要安全地刪除從Iterable此類對象的List而做的時候,使用Iterator

Iterator<String> iterator = list.iterator(); 
while(iterator.hasNext()) { 
    String s = iterator.next(); 
    if(some comdition on s) { 
     iterator.remove(); 
    } 
}