亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

arraylist - indexoutofboundsexception

arraylist - indexoutofboundsexception

蝴蝶刀刀 2022-11-02 17:18:52
我試圖遍歷一個數組列表并從中添加或刪除項目,這是 Codegym.cc 的一個問題,我不確定解決方案是什么,有什么幫助嗎?在我添加最后兩個 if 語句之前,我已經讓它工作了,但我真的不知道我做錯了什么。public class Cat {    public static void main(String[] args) throws Exception {        ArrayList<String> list = new ArrayList<String>();    list.add("rose");    list.add("measure");     list.add("love");     list.add("lyre");     list.add("wade");    list.add("bark");             list = fix(list);    for (String s : list) {        System.out.println(s);    }}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")){            list.remove(i);            if(i > 0) {i--;}            }        //if contains l and not r - dub entry         if(!list.get(i).contains("r") && list.get(i).contains("l")){            list.add(i, list.get(i));            if(i == list.size()-1) {break;}else {i+=2;}        }        //contains none - do nothing        if(!list.get(i).contains("r") && !list.get(i).contains("l")){            i++;        }        //contains both - do nothing        if(list.get(i).contains("r") && list.get(i).contains("l")){            i++;        }      }    return list; }}
查看完整描述

2 回答

?
郎朗坤

TA貢獻1921條經驗 獲得超9個贊

有一點你應該注意。操作數組時,您應該提及到達最后一個元素時要做什么。在 CS 中,數組計數從 0 開始。在長度為 4 的數組中,最后一個元素的索引為 3 而不是 4。


問題是如果在沒有邊界檢查的情況下進行增量,則您沒有檢查最后兩個情況。這意味著當您返回第一個 if 語句時,有可能出現異常。


另一個問題是 for 循環永遠不會結束。


這是消除異常的快速解決方案。您必須注意到程序不會停止。您應該指定一些條件以退出 for 循環。


注意:你最終會得到一個只有愛這個詞的巨大數組。


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;


 }


查看完整回答
反對 回復 2022-11-02
?
小唯快跑啊

TA貢獻1863條經驗 獲得超2個贊

由于您要從列表中刪除元素,因此列表的大小會遞減,并且您正在運行循環直到列表的大?。▽嶋H上已經改變),這就是 OutOfIndexException 的原因:)



查看完整回答
反對 回復 2022-11-02
  • 2 回答
  • 0 關注
  • 227 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號