引发错误消息:索引超出范围异常

时间:2018-12-04 03:07:10

标签: java junit indexoutofboundsexception

对于以下代码,我正在获取索引超出范围的异常,并且我不确定原因。任何帮助将不胜感激。

public Rabbit nearestRabbit()
{
    List<Rabbit> rabbits = this.getWorld().getObjects(Rabbit.class);
    if (this.getWorld().getObjects(Rabbit.class) == null)
    {
        return null;
    }
    Rabbit nearest = rabbits.get(0);
    double distance = distanceTo(nearest);

    for (Rabbit rabbit : rabbits)
    {
        double thisDistance = distanceTo(rabbit);
        if (thisDistance > distance)
        {
            distance = thisDistance;
            nearest = rabbit;
        }
    }
    return nearest; //@@@@@@@
}

4 个答案:

答案 0 :(得分:4)

这主要是由于您的列表大小,我知道您已经为列表检查了null,但是由于列表不是null,因此大小为0还是可以为空,并且您不能访问索引为0的元素。 我建议您检查列表大小。

答案 1 :(得分:2)

通过不检查索引rabbits.get(0)中的索引是否在范围内来获取此异常。

一个简单的解决方法是将这段代码放在第一位。

if (rabbits.isEmpty())
    return null;

这将在拨打其他电话之前检查列表是否为空。

此外,最好不要重复引用this.getWorld().getObjects(Rabbit.class),尤其是在将其保存为更易于访问的变量之后。

答案 2 :(得分:1)

为您的尺寸添加尺寸检查

if (this.getWorld().getObjects(Rabbit.class) == null || rabbits.isEmpty() )

列表很可能不会为空,但仍然为空。例如。任何新生成的:

LinkedList<Object> objs = new LinkedList<>();
System.out.println(objs != null && objs.isEmpty()); //true

答案 3 :(得分:0)

您的IndexOutOfBound可能是在索引可能为空的索引0处获取的。

if (!rabbits.isEmpty())
{
    Rabbit nearest = rabbits.get(0);
}