2011-09-01 4 views
1

나는 응용 프로그램을 최적화 및 향상된 루프에 루프 내 변경을 원했다 :향상된 for 루프를 사용하여 배열을 초기화하는 방법은 무엇입니까?

for (int m = 1;m < MAX_BEREN;m++) 
{   
    Wasberen[m] = new Wasbeer();  
    Wasberen[m].YYY = r.nextInt(SchermY - 28); 
} 

에 :에서

, 내가 NullPointerException이 얻을

for (Wasbeer a : Wasberen) 
{ 
    if (a!=null) 
    { 
     a = new Wasbeer(); 
     a.YYY = r.nextInt(SchermY - 28); 
    } 
} 

그것은 아마 나던 알고 있기 때문에 얼마나 'beren' 배열에있을 수 있지만 위의 루프 (MAX_BEREN = 11) 같은 관리하는 방법을 잘 모르겠습니다.

답변

1

향상된 for 문에서 배열 참조 (이 경우 'Wasberen')가 null 인 경우 문이 실행될 때 NullPointerException이 발생합니다.

+0

그래서 'for'로 초기화하고 나중 단계에서 향상된 루프를 반복합니까? 초기화 후에 'wasberen'이 이미 존재하므로 – Mars

+0

Wasipper no-arg 생성자 또는 'r'도 null 참조 인 경우 NullPointerException을 throw 할 수 있습니다. 예외에 대한 스택 추적은 범인을 식별해야합니다. –

1

배열을 초기화하려면 이전에 사용한 구문을 고수해야합니다.

+0

a [i] = new Object(); 객체와 동일하지 않습니다. b = a [i]; b = 새 Object(); – bitle

0

Java에서 향상된 for-loop를 사용하여 배열을 채울 수 없습니다. (내가 전에 Wasberen 배열이 이미 만들어졌습니다 있으리라 믿고있어 -.하지 않을 경우,이 두 변종 당신에게 NullPointerException이 얻을 것이다) (간체)

에 코드를 입력하는 것은

for (Wasbeer a : Wasberen) 
{ 
    a = ...; 
} 

for (int i = 0; i < Wasberen.length; i++) 
{ 
    Wasbeer a = Wasberen[i]; 
    a = ...; 
} 
에 해당

이 할당은 로컬 변수 a을 변경하지만 배열의 내용에는 영향을 미치지 않습니다.

관련 문제