IndexOutOfBoundsException:Index:3,Size:0

时间:2016-09-25 19:26:20

标签: java arraylist

我的Java程序中有关于数组列表的数组列表的异常。我在下面列出了我的计划的相关部分。

List<List<Integer>> inverse_men_preference = new ArrayList<List<Integer>>(n);
    for (int i = 0; i < n; i++)
    {
        inverse_men_preference.add(new ArrayList<Integer>(n));
    }

    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
        {
            inverse_men_preference.get(i).add(marriage.getMenPreference().get(i).get(j), j);
        }
    }

我查看了类似的问题,但我仍然无法弄清楚为什么我的数组列表的大小被认为是空的。我是Java的新手,所以我认为我有一些根本的误解,使我无法理解错误。任何意见或建议都会有所帮助。谢谢。

3 个答案:

答案 0 :(得分:3)

您没有在ArrayList中放置任何项目。 n只是它的容量,而不是它的大小。始终使用集合size(),并避免在此处使用magic numbers

答案 1 :(得分:0)

看起来你得到的错误是因为marriage.getMenPreference().get(i).get(j)部分。也许marriage.getMenPreference()返回的任何一个列表都没有ithjth元素。如果我们用常量替换它,它可以正常工作,例如:

int n = 2;
List<List<Integer>> inverse_men_preference = new ArrayList<List<Integer>>(n);
for (int i = 0; i < n; i++) {
    inverse_men_preference.add(new ArrayList<Integer>(n));
}

for (int i = 0; i < n; i++) {
    for (int j = 0; j < n; j++) {
        inverse_men_preference.get(i).add(0, j);
    }
}

确保在执行上述操作之前初始化/填充marriage.getMenPreference()

答案 2 :(得分:0)

这不是您的任何列表的问题。例外是指定而不是添加单个整数 - 您调用方法&#34;添加&#34;有两个参数。这很好用:

public static void main(String[] args) {
    int n = 10;
    List<List<Integer>> inverse_men_preference = new ArrayList<List<Integer>>(n);

    for (int i = 0; i < n; i++)
        inverse_men_preference.add(new ArrayList<Integer>(n));

    for (int i = 0; i < n; i++)
        for (int j = 0; j < n; j++)
            inverse_men_preference.get(i).add(5);
}

而这就是你所做的:

public static void main(String[] args) {
    int n = 10;
    List<List<Integer>> inverse_men_preference = new ArrayList<List<Integer>>(n);

    for (int i = 0; i < n; i++)
        inverse_men_preference.add(new ArrayList<Integer>(n));

    for (int i = 0; i < n; i++)
        for (int j = 0; j < n; j++)
            inverse_men_preference.get(i).add(5, 34);
}

List就是这样一个集合,你可以将元素插入到它的开头/中间/末尾。虽然它是空的,但你不能添加元素,例如在第五个位置。我建议使用数组而不是arraylist,因此您可以随时在其中的不同位置插入值。