簡體   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