我在Greenfoot为一个学校项目编程,我一直收到这个错误:
java.lang.IndexOutOfBoundsException: Index: 1, Size: 1
at java.util.ArrayList.rangeCheck(ArrayList.java:635)
at java.util.ArrayList.get(ArrayList.java:411)
at Speler.act(Speler.java:60)
at greenfoot.core.Simulation.actActor(Simulation.java:583)
at greenfoot.core.Simulation.runOneLoop(Simulation.java:541)
at greenfoot.core.Simulation.runContent(Simulation.java:215)
at greenfoot.core.Simulation.run(Simulation.java:205)
通过此代码:
if (Greenfoot.isKeyDown("s"))
{
int wapenID;
if(schietTimer < 1)
{
if(richting != null)
{
if(gebruiktWapen != -1)
{
{
getWorld().addObject(new Kogel(richting), getX(), getY());
schietTimer = 30;
wapenLijst.get(gebruiktWapen).schietKogel();
System.out.println(wapenLijst.size());
if(wapenLijst.get(gebruiktWapen).hoeveelKogels() == 0)
{
gebruiktWapen++;
}
}
}
else
{
if(wapenLijst.size() > 0)
{
gebruiktWapen ++;
}
}
}
}
}
到目前为止,我似乎无法找到错误,因为我做了一些检查来检查索引。任何人都可以帮我解决这个问题吗?
答案 0 :(得分:1)
我将解释错误的原因(假设附加的代码实际上是导致异常的代码),即使问题缺少完全精确定位的代码如何它发生了。
java.lang.IndexOutOfBoundsException:Index:1,Size:1
表示您正在使用索引1访问大小为1的List
。Java中的索引基于零,因此索引:1 表示列表中的第二个元素。没有第二个元素,因此是例外。
从你给出的代码中只有一个列表,所以错误发生在这里:
wapenLijst.get(gebruiktWapen).schietKogel();
在应用程序的给定状态下,wapenLijst
有一个元素,gebruiktWapen
为1.根据上面的解释,当只有一个元素时,您尝试访问列表中的第二个元素。
您是否可能以某种方式实施一些不允许gebruiktWapen
变得大于wapenLijst.size()
的检查?