簡體   English   中英

“線程”main“中的異常 java.lang.IndexOutOfBoundsException: Index: 0, Size: 0” with ArrayList?

[英]“Exception in thread ”main“ java.lang.IndexOutOfBoundsException: Index: 0, Size: 0” with ArrayList?

“線程“main”中的異常 java.lang.IndexOutOfBoundsException: Index: 0, Size: 0” 是我編譯此方法時遇到的主要錯誤:

public static ArrayList<ArrayList<Integer>> createSparseArray(int len, double den) {
    int counter = 0;
    ArrayList<Integer> placeHolder = new ArrayList<Integer>();
    for (int j = 0; j < len; j++) {
        double randomNumber = Math.random();
        if (randomNumber < den) {
            counter++;
            placeHolder.add(j);
        }
    }
    ArrayList<ArrayList<Integer>> list = new ArrayList<ArrayList<Integer>>();
    for (int k = 0; k < counter; k++) {
        for (int m = 0; m < 2; m++) {
            list.get(0).set(placeHolder.get(k), (int) (Math.random() * (99999) + 1));
        }
    }
    return list;
}

我怎樣才能解決這個問題?

ArrayList<ArrayList<Integer>> list在第 (0) 個位置不包含任何元素,並且編譯器在迭代時在指定位置找不到任何元素時拋出越界異常。

當你嘗試執行list.get(0).set(placeHolder.get(k), (int) (Math.random() * (99999) + 1)); 聲明,您的列表中不包含任何元素。 您需要遍歷內部列表為設置的值list

不要在不存在的元素上使用list.set(index, element) ,因為它用新元素替換舊(不存在)元素並返回舊元素。 相反,使用list.add(index, element)它將起作用。

我想你在這里有錯誤

列表。 get(0) .set(placeHolder.get(k), (int) (Math.random() * (99999) + 1));

java.util.ArrayList.get(int index) 方法返回此列表中指定位置的元素。

您僅設置為列表數組中的第一個元素

在這里,主要問題是數組索引和真正的邏輯索引的區別......

ArrayList以索引 0開始的事實開始

* 但是在您的邏輯中,當您使用X.add("Y")和 i = 0 時,邏輯無法找到位置 0 或無法恢復位置元素 0; *

這意味着......它顯示出站索引錯誤;

解決方案 ;

第一個解決方案:使用i< i而不是i<=第二種解決方案:使用i = 1代替i = 0進行初始化

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM