我的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的新手,所以我认为我有一些根本的误解,使我无法理解错误。任何意见或建议都会有所帮助。谢谢。
答案 0 :(得分:3)
您没有在ArrayList中放置任何项目。 n
只是它的容量,而不是它的大小。始终使用集合size()
,并避免在此处使用magic numbers。
答案 1 :(得分:0)
看起来你得到的错误是因为marriage.getMenPreference().get(i).get(j)
部分。也许marriage.getMenPreference()
返回的任何一个列表都没有ith
或jth
元素。如果我们用常量替换它,它可以正常工作,例如:
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,因此您可以随时在其中的不同位置插入值。