繁体   English   中英

索引越界异常

[英]Index Out Of Bounds Exception

我正在开发《我的世界》 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,循环被认为是列表中的第一个不存在的空间。

您创建了一个新的ArrayList C4 ,您从不将任何东西放在List ,然后向其索要索引0的元素。 由于列表仍然为空,因此该元素不存在,并且引发异常。

您可以通过调整方法来避免此异常

public static EntityC4 getitemfromnumber(int num)
{
  EntityC4 entity = null;
  if ( num >=0 && num < C4.size ){
    entity = (EntityC4)C4.get(num);
  }
  return entity;
}

这样可以避免出现异常,但是由于您永远找不到元素(在列表中不可用),因此您会陷入循环中

如果仅调用getNum() ,则C4显然是空的,因此该异常表示您正在访问的索引不存在。

您可能要通过调用createdetonater(..)来预填充列表?

您的错误来自

EntityC4 c = (EntityC4)C4.get(num);

指出您的C4为空,您想对列表进行not nullnotEmpty检查。

为了检查C4为空的原因,请在createdetonater上进行跟踪,并查看其调用位置。

您的错误消息会告诉您所有信息:您正在尝试从没有元素的列表中获取第零个元素。 您可能需要在C4添加一些内容,

如果重写循环以使用计数器,则可以避免此错误。 我不确定您的代码到底想做什么(返回第一个非空实例?),因此下面的循环可能不正确。

如果您尝试存储ID到实体的映射,则可能应该使用HashMap <Integer,EntityC4>代替。

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...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM