2014-04-25 2 views
0

학교용 프로그램에서 작업 할 때 메서드에 지정한 값에 따라 배열의 인덱스를 반환하는 메서드를 만들었습니다. 이 메서드는 NullPointerException을 throw하지만 배열의 모든 인덱스에 이미 인스턴스화되었습니다. 이것을 보여주기 위해 똑같은 테스트 프로그램을 만들었습니다.배열의 하나의 인덱스를 반환하는 메서드는 NullPointer를 throw합니다.

public class Test { 
private static Number[] numbers = new Number[16]; 

public static void main(String[] args) { 
    new Test(); 
} 

public Test() { 
    for (Number n : numbers) { 
     n = new Number(0); 
    } 
    System.out.println(get(0).value); 
} 

public Number get(int index) { 
    return numbers[index]; 
} 

class Number { 
    public int value; 

    public Number(int value) { 
     this.value = value; 
     } 
    } 
} 

이 옵션을 실행하면 Integer "value"값이 출력됩니다.이 값은 배열의 첫 번째 위치에있는 객체의 경우입니다.

나는 이것에 간단한 설명이있을 것이라고 확신하지만, 나는이 문제를 인식하지 못하고있다.

답변

4

읽기 전용 패스에는 for-each 루프를 사용해야합니다. 현재 생성자에서 배열의 요소는 초기화되지 않은 상태이므로 오류가 발생합니다.

그래서 일반 for 루프로 변경하십시오.

for(int i = 0; i < numbers.length; i++){ 
    numbers[i] = new Number(0); 
} 
+0

대단히 감사합니다. 각 루프가 일반 for 루프와 똑같이 작동하지 않는다는 것을 알지 못했습니다. – piechesse

+0

@piechesse 예, 마지막에 제공 한 링크를 읽을 수 있습니다.) –

관련 문제