2014-12-27 2 views
0

내 프로젝트에 도움을 요청하고 싶습니다. 나는 초보자 프로그래머이고 나는이 내 코드입니다 "exception in thread main java.lang.nullpointerexception"제발 도와주세요 "자바 주 예외 스레드 java.lang.nullpointerexception"

이 오류하지 않습니다

public class Slumbook{ 

    public String codeName; 

    public Slumbook(){ 
     // 
    } 

    public Slumbook(String codeName){ 
     this.codeName = codeName; 
    } 

    public String getCodeName(){return codeName;} 

    public void setCodeName(String codeName){this.codeName = codeName;} 
    } 

그리고 Driver Program 코드는 다음과 같습니다 - 당신은 할당

import java.util.*; 

public class SlumbookD{ 
    public static void main(String[] args){ 

     Scanner sc = new Scanner(System.in); 
     Slumbook[] slum = new Slumbook[20]; 

     for(int n=0; n<10; n++){ 
      slum[n].setCodeName(sc.nextLine()); 
     } 
    } 
} 
+2

당신은 배열을 생성을 방지하기 위해 한 번에 배열의 모든 요소를 ​​초기화하지만, 각 배열 슬롯을 초기화하기 수 없다. 'NullPointerException'이 무엇인지 조사해야한다. 왜냐하면이 질문은 항상 묻기 때문이다. –

+1

루프가 생길 무렵에 'slum [n]'이 인스턴스화되지 않았습니다. 즉, 널 참조/포인터입니다. 코드 이름을 설정하기 전에 각 요소를 '슬럼'에 인스턴스화하여 수정하십시오. – apnorton

답변

0

배열 요소를 사용하기 전에이를 초기화해야합니다.

Slumbook[] slum = new Slumbook[20]; 

for(int n=0; n<10; n++){ 
    slum[n] = new Slumbook(); 
    slum[n].setCodeName(sc.nextLine()); 
} 

당신은 미래의 예외

Slumbook[] slum = new Slumbook[20]; 

for(int i = 0 ; i < slum.length ; i++) //initializing all the elements 
    slum[i] = new Slumbook(); 

for(int n=0; n<10; n++){ 
    slum[n].setCodeName(sc.nextLine()); 
} 
+0

두 개의 루프가있는 것이 오버 헤드가 많고, ** 향후 예외가 발생할 것이라고 설명 할 수 있습니까? –

2

에게 배열 ...하지만 배열에 포함 된 개체를 할당하지 못했습니다.

는 SUGGESTION : 당신은 빈 배열을 생성하지만, 초기화되지 않은

import java.util.*; 

public class SlumbookD { 

    public static void main(String[] args){ 
     Scanner sc = new Scanner(System.in); 
     Slumbook[] slum = new Slumbook[20]; 
     for(int n=0; n<slum.length; n++){ 
      slum[n] = new Slumbook(sc.nextLine); 
     } 
    } 

} 

... 이상 ...

// You only need one class - with it's own main(). Not two classes... 
public class Slumbook{ 

    public String codeName; 

    public Slumbook(String codeName){ 
    this.codeName = codeName; 
    } 

    public String getCodeName(){ 
    return codeName; 
    } 

    public void setCodeName(String codeName){ 
    this.codeName = codeName; 
    } 

    public static void main(String[] args){ 
    Scanner sc = new Scanner(System.in); 
    Slumbook[] slum = new Slumbook[20]; 
    for(int n=0; n<slum.length; n++){ 
     slum[n] = new Slumbook(sc.nextLine); 
    } 
    } 

}

+0

천천히 입력 ... 너무 많은 오타. – Astrobleme

+0

@ ambigram_maker : OP가 "드라이버 클래스"라는 이름의 SlumbookD를 사용했기 때문에. – FoggyDay

+0

그래, 알 겠어.하지만 그건'getCodeNae()'에 대한 핑계가 아니야 ;-) – Astrobleme

1

, 당신은에서 객체 참조를 연결해야 배열 인덱스와 이면 해당 인덱스에 대해 원하는 수의 setter 메소드를 호출 할 수 있습니다.

Slumbook[] slum = new Slumbook[20]; 

    for(int n=0; n<10; n++){ 
     slum[n] = new Slumbook(); // Instantiate Slumbook class and assign reference 
     slum[n].setCodeName(sc.nextLine()); 
    } 
관련 문제