2011-12-05 6 views
1

저는 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) 

EDIT 말한다 나타난다 : 타이를 루프가 목록의 첫 번째 존재하지 않는 공간을했는데.

+0

질문에 대한 답변을 쉽게하기 위해 어떤 줄이 있는지 알려주십시오. –

+0

먼저 C4에 콘텐츠를 채울 필요가 없습니까? AFAIK, 예외는 C4가 빈 배열로 (첫 줄에서) 초기화되고 내용이 채워지지 않는다는 것을 의미합니다 ... –

+0

C4 변수에 대해 Map 대신 ArrayList를 사용하는 이유가 있습니까? 코드에서 맵 기능을 복제하려고하는 것 같습니다. –

답변

5

ArrayList C4을 새로 만들고 List에 아무 것도 넣지 않은 다음 인덱스 0에 요소를 요청하십시오. 이 요소는 List가 여전히 비어있어 존재하지 않으며 예외를 throw합니다.

(목록에서 사용할 수 없습니다하는) 당신이 예외를 피할 수

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

당신의 방법을 조정하여이 예외를 피할 수 있지만, 당신은 당신이 요소를 찾을 수 없을 이후 루프에 갇혀 얻을 것이다

+0

질문에 getitemfromnumber (num)가 아닌 getnum()이 호출 될 때 예외가 발생한다고합니다. –

+0

수정하십시오. 나는 잘못된 방법을 다시 썼다. 그러나 그가 get 주위에 놓을 수있는 수표는 유효하며, 목록이 비어있을 때 루프에 갇히는 것에 대한 발언도 유효합니다. – Robin

1

C4은 분명히 getNum()을 호출하면 분명히 비어 있으므로 액세스하는 색인이 존재하지 않는다는 예외입니다.

createdetonater(..)을 호출하여 목록을 미리 채울 수 있습니다.

1

귀하의 오류가 C4가 비어있는 상태

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

에서 오는, 당신은 당신의 목록에 not nullnotEmpty 확인을하고 싶습니다.

C4이 비어있는 이유를 확인하려면 createdetonater에서 추적을 수행하고 해당 위치를 확인하십시오.

0

오류 메시지가 모든 것을 알려줍니다. 요소가없는 목록에서 0 번째 요소를 가져 오려고합니다. C4에 뭔가를 추가해야 할 수도 있습니다.

0

카운터를 사용하도록 루프를 다시 작성하면이 오류가 발생하지 않습니다. 확실하지 않은 귀하의 코드를 시도하고있다 (첫 번째 비 - null 인스턴스를 반환?), 그래서 아래 루프가 올바르지 않을 수 있습니다.

엔티티에 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... 
관련 문제