2 回答

TA貢獻(xiàn)1921條經(jīng)驗(yàn) 獲得超9個(gè)贊
有一點(diǎn)你應(yīng)該注意。操作數(shù)組時(shí),您應(yīng)該提及到達(dá)最后一個(gè)元素時(shí)要做什么。在 CS 中,數(shù)組計(jì)數(shù)從 0 開始。在長(zhǎng)度為 4 的數(shù)組中,最后一個(gè)元素的索引為 3 而不是 4。
問(wèn)題是如果在沒(méi)有邊界檢查的情況下進(jìn)行增量,則您沒(méi)有檢查最后兩個(gè)情況。這意味著當(dāng)您返回第一個(gè) if 語(yǔ)句時(shí),有可能出現(xiàn)異常。
另一個(gè)問(wèn)題是 for 循環(huán)永遠(yuǎn)不會(huì)結(jié)束。
這是消除異常的快速解決方案。您必須注意到程序不會(huì)停止。您應(yīng)該指定一些條件以退出 for 循環(huán)。
注意:你最終會(huì)得到一個(gè)只有愛(ài)這個(gè)詞的巨大數(shù)組。
public static ArrayList<String> fix(ArrayList<String> list) {
// write your code here
//loop through array
for (int i = 0; i < list.size();){
//if contains r and not l -remove it
if(list.get(i).contains("r") && !list.get(i).contains("l")){
System.out.println(list.toString());
list.remove(i);
System.out.println(list.toString());
if(i > 0) {i--;}
}
//if contains l and not r - dub entry
if(!list.get(i).contains("r") && list.get(i).contains("l")){
System.out.println(list.toString());
list.add(i, list.get(i));
System.out.println(list.toString());
if(i == list.size()-1) {break;}else {i+=2;}
}
//contains none - do nothing
if(!list.get(i).contains("r") && !list.get(i).contains("l")){
}
//contains both - do nothing
if(list.get(i).contains("r") && list.get(i).contains("l")){
}
}
return list;
}

TA貢獻(xiàn)1863條經(jīng)驗(yàn) 獲得超2個(gè)贊
由于您要從列表中刪除元素,因此列表的大小會(huì)遞減,并且您正在運(yùn)行循環(huán)直到列表的大?。▽?shí)際上已經(jīng)改變),這就是 OutOfIndexException 的原因:)
添加回答
舉報(bào)