gpt4 book ai didi

java - 线程中的异常 "main"java.lang.IndexOutOfBoundsException : Index: 0, 大小 : 0?

转载 作者:行者123 更新时间:2023-11-30 07:52:54 31 4
gpt4 key购买 nike

因此,我在以下代码中收到上述错误(我的目标是递归地对我的对象进行排序并按区域排列它们)。

private static void recursionSort(ArrayList<GeometricObject> data)
{


ArrayList<GeometricObject> a = new ArrayList<GeometricObject>(data.size() / 2);
ArrayList<GeometricObject> b = new ArrayList<GeometricObject>(data.size() - a.size()); // Split array into two
// halves, a and b
for(int i = 0; i < data.size(); i++)
{
if(i < a.size())
a.set(i,data.get(i));
else
b.set(i - a.size(),data.get(i));
}

recursionSort(a); // Recursively sort first
recursionSort(b); // and second half.

int ai = 0; // Merge halves: ai, bi
int bi = 0; // track position in
while(ai + bi < data.size()) { // in each half.
if(bi >= b.size() || (ai < a.size() && a.get(ai).getArea() < b.get(bi).getArea())) {
data.set(ai + bi,a.get(ai)); // (copy element of first array over)
ai++;
} else {
data.set(ai + bi,b.get(bi)); // (copy element of second array over)
bi++;
}
}
System.out.println(data);
}

现在让我困惑的是我的索引从 0 开始(正确吗?)那么为什么我的索引为 0 大小 0,列表中的第一个对象(索引 0)肯定不是空的?有什么帮助或想法吗?谢谢!

最佳答案

看看JavaDoc for ArrayList constructor 。据说:

Constructs an empty list with the specified initial capacity.

现在在 ArrayList#size()说明:

Returns the number of elements in this list.

您得到的异常是由于对这两种方法行为的误解引起的。即使在第一次迭代中,您也可以通过带有initialCapacity的构造函数创建2个ArrayList实例,并且您认为您的ArrayList是用某种东西初始化的,但不是。您的列表仍然是空的,即使在第一次迭代中,调用 ArrayList#size() 也会返回 0。

使用初始容量来定义内部数组大小,以使 ArrayList 更加高效,因为当 ArrayList 增长时,它不必重复重新分配内部数组。它不会使用某些内容初始化您的列表,并且如果您不手动添加元素,则无法对元素进行任何操作。

您收到 java.lang.IndexOutOfBoundsException 是因为您尝试为某些元素调用 ArrayList#set(int index, E element) 方法,但该方法不会存在(您的列表为空且尚未初始化)。

关于java - 线程中的异常 "main"java.lang.IndexOutOfBoundsException : Index: 0, 大小 : 0?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33117208/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com