我正在开发一个Minecraft mod。 EntityC4的id系统无法正常工作。代码是
public static List C4 = new ArrayList();
public static EntityC4 getitemfromnumber(int num)
{
EntityC4 entity = (EntityC4)C4.get(num);
return entity;
}
public static void createdetonater(EntityC4 c4, int num)
{
C4.add(num, c4);
}
public static int getnum(){
int num = 0;
for(boolean a = true; a != false;){
EntityC4 c = (EntityC4)C4.get(num);
System.out.print("current num : " + num);
if(c != null)
{
a = false;
}else{
System.out.print("entity " + num + " is null" );
num++;
}
}
return num;
}
当我使用getnum()时,出现错误
java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
at java.util.ArrayList.RangeCheck(Unknown Source)
at java.util.ArrayList.get(Unknown Source)
编辑:Ty和循环被认为是列表中第一个不存在的空间。
答案 0 :(得分:5)
您创建了一个新的ArrayList C4
,您从未在List
中添加任何内容,然后您要求它为索引0
处的元素。此元素不存在,因为List仍为空,并且它会抛出异常。
您可以通过调整方法来避免此异常
public static EntityC4 getitemfromnumber(int num)
{
EntityC4 entity = null;
if ( num >=0 && num < C4.size ){
entity = (EntityC4)C4.get(num);
}
return entity;
}
这样可以避免异常,但是你会陷入循环,因为你永远找不到元素(列表中没有)
答案 1 :(得分:1)
C4
,那么 getNum()
显然是空的,因此说你正在访问的索引不存在。
您可能希望通过调用createdetonater(..)
预先填充列表?
答案 2 :(得分:1)
您的错误来自
EntityC4 c = (EntityC4)C4.get(num);
表示您的C4
为空,您希望在列表中进行not null
和notEmpty
检查。
为了检查C4
为空的原因,请在createdetonater
上执行跟踪并查看其被调用的位置。
答案 3 :(得分:0)
您的错误消息告诉您所有内容:您正在尝试从没有元素的列表中获取第0个元素。您可能需要向C4
添加内容,
答案 4 :(得分:0)
如果您重写循环以使用计数器,那么它将避免此错误。我不确定你的代码到底要做什么(返回第一个非null实例?),所以下面的循环可能不正确。
如果您尝试将ID映射存储到实体,那么您应该使用HashMap&lt; Integer,EntityC4&gt;代替。
for(int num = 0; num < C4.size(); num++)
{
EntityC4 c = (EntityC4)C4.get(num);
System.out.print("current num : " + num);
if(c != null)
{
return num;
} else
{
System.out.print("entity " + num + " is null" );
}
}
// throw an exception or whatever else your code should do here...