Java 抛出错误消息:索引超出界限异常
对于下面的代码,我得到了一个索引越界异常,我不知道为什么。非常感谢您的帮助Java 抛出错误消息:索引超出界限异常,java,junit,indexoutofboundsexception,Java,Junit,Indexoutofboundsexception,对于下面的代码,我得到了一个索引越界异常,我不知道为什么。非常感谢您的帮助 public Rabbit nearestRabbit() { List<Rabbit> rabbits = this.getWorld().getObjects(Rabbit.class); if (this.getWorld().getObjects(Rabbit.class) == null) { return null; } Rabbit nea
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; //@@@@@@@
}
public-Rabbit()
{
List rabbts=this.getWorld().getObjects(Rabbit.class);
if(this.getWorld().getObjects(Rabbit.class)==null)
{
返回null;
}
最近的兔子=兔子。获取(0);
双距离=距离(最近);
用于(兔子:兔子)
{
此距离加倍=距离(兔子);
如果(此距离>距离)
{
距离=此距离;
最近的=兔子;
}
}
最近的返回//@@@@@@@
}
这主要是由于您的列表大小,我知道您已为列表选中了null,但由于列表不是null
,因此大小为0
的列表仍然可以为空,并且您无法访问索引0
处的元素。
我建议您检查列表大小。在if中添加大小检查
if (this.getWorld().getObjects(Rabbit.class) == null || rabbits.isEmpty() )
列表可能不是空的,但仍然是空的。例如,任何新生成的:
LinkedList<Object> objs = new LinkedList<>();
System.out.println(objs != null && objs.isEmpty()); //true
LinkedList objs=新建LinkedList();
System.out.println(objs!=null&&objs.isEmpty())//真的
通过不检查索引是否在调用rabbts.get(0)
的范围内,您将获得此异常
一个简单的解决方法是将此代码放在第一位
if (rabbits.isEmpty())
return null;
这将在进行任何其他调用之前检查列表是否为空
另外,最好不要多次引用
this.getWorld().getObjects(Rabbit.class)
,尤其是在将其作为一个更容易访问的变量保存之后。您的IndexAutofBound可能是在索引0处获取元素时,其中列表可能为空
if (!rabbits.isEmpty())
{
Rabbit nearest = rabbits.get(0);
}
你从哪里得到的错误?从
rabbits.get(0)
?在Rabbit nextest=rabbits.get(0)您的if语句应该是rabbits==null | | | rabbits.isEmpty()
而不是this.getWorld().getObjects(Rabbit.class)==null