2012-04-15 11 views
0
을 이해하려고하는 Java 초보자

Java에서 iTunes U Stanford CS106a 과정을 수행 중이며 좋아하지만이 이름 서퍼 프로그램에 대한 의견을 듣고 있습니다. NullPointerException 및

나는 ". : 16 NameSurferEntry (문자열) 라인"라는이 코드 내가 두 번째 줄 (INT의 endOfName 등)에 일시 중단/NullPointerException이 얻을

public NameSurferEntry(String line) { 
    int endOfName = line.indexOf(" "); 
    name = line.substring(0,endOfName); 
    String newLine = line.substring(endOfName+1); 
    StringTokenizer tokenizer = new StringTokenizer(newLine); 

    if (tokenizer.hasMoreTokens()) { 
    name = tokenizer.nextToken(); 
    } 

    for (int i = 0; tokenizer.hasMoreTokens(); i++) { 
    array[i] = Integer.parseInt(tokenizer.nextToken()); 
    } 
} 

를 사용

.

내가이 방법을 수행하려고 할 경우

:

public NameSurferEntry(String line) { 
    StringTokenizer tokenizer = new StringTokenizer(line); 
    name = tokenizer.nextToken(); 

    for (int i = 0; tokenizer.hasMoreTokens(); i++) { 
    array[i] = Integer.parseInt(tokenizer.nextToken()); 
    } 
} 

라는 메시지가 "있고 StringTokenizer (문자열, 문자열, 부울) 라인. : 182"로 일시 중단/NullPointerException이 얻을이 다음은 "소스를 찾을 수 없습니다. "

누구에게 내가 뭘 잘못하고 있는지에 대한 아이디어가 있습니까? 도움을

UPDATE

감사합니다.

NameSurferEntry는 실제로 null에 값을 제공하는 다른 클래스에서 호출합니다. 그러나 귀하의 제안을 읽은 후 나는 line을 ivar로 선언했지만 NameSurferEntry의 본문에서 그것을 초기화하고 수정했습니다. (내가 초기화하고 초기화하기 전에, 나는 초기화하는 곳이 왜 다른지를 이해하지 못합니다.)

다음 오류는 48 행까지입니다! 그래서 곧 다시 내게 들려 줄 것입니다 ... 내 길에서 내가 스스로 알아낼 수 있는지 보려고. 다시 한번 감사드립니다.

으악

너무 빨리하지 않습니다.

line을 NameSurferEntry 본문의 실제 String으로 초기화하면 모든 것이 정상적으로 처리됩니다.

public NameSurferDataBase(String filename) { 
    try { 
    BufferedReader br = new BufferedReader(new FileReader(filename)); 

    while (true) { 
     String blah = br.readLine(); 

     if (blah == null) { 
     break; 
     } 

     NameSurferEntry entry = new NameSurferEntry(blah); 
     hmap.put(entry.getName(), entry); 
    } 
    br.close(); 
    } 
    catch (IOException ex) { 
    throw new ErrorException(ex);   
    } 
} 

(.이 방법은 다시 그것을 filename에 대한 실제 파일을 제공하는 다른 방법에 의해 호출, 그래서 우리가 괜찮아됩니다)

:

문제는 NameSurferEntry이 다른 방법에 의해 호출되는 것입니다

그러나 매개 변수 blahNameSurferEntry으로 전달하면 NameSurferEntry은 매개 변수를 초기화 한 다음 blah을 올바르게 잃었습니까? 내 임펄스가 line을 메서드 외부의 ivar로 초기화하는 것입니다. 그러나 다시 NullPointerException 메시지가 표시되고 다시 시작되었습니다. 아!

생각하십니까?

+0

질문이 이해가 가지 않습니다. 마지막으로 게시 된 코드는'NameSurferEntry' 생성자가 null이 아닌 값으로 만 호출되도록합니다. 그래서 모든 것이 잘되어야합니다 ... 텍스트의 벽을 줄이고 질문이 실제로 무엇인지 분명히하십시오. 그것이 원래 질문이 아닐 때 그대로 여기에두고 다른 질문을하십시오. –

+0

죄송합니다. 나는 StackOverflow를 처음 사용하고 아직도 어떻게 동작하는지 파악하고있다. 나는 다음에 더 잘 알 것이다. –

답변

1

line 인수가 null입니다. 그렇기 때문에 line (indexOfStringTokenizer에서 line)을 사용하려고 시도하는 동안 NullPointerException을 얻는 이유는 line이 null 인 경우 NullPointerException이 될 것이며 아무 것도 작동하지 않습니다.

+0

음, NameSurferEntry는 다음과 같은 다른 클래스에서 호출됩니다. –

+0

알림을 받았는지 여부에 관계없이 업데이트 방법을 잘 모르겠습니다. 하지만 기본적으로 대답은 너희들이 나를 고칠 수 있도록 도와 준다는 것이다. 이제 48 번 라인까지는 다음 오류로 넘어갑니다! –

+0

@JoelDerfner 당신을 도왔습니다! :) 나는 당신의 다음 오류에 대한 다른 질문을하는 것이 좋습니다. 그래서 일반적으로 게시물 당 하나의 질문을 처리하므로 다음 질문을 위해 다른 게시물을 열어야합니다. – Roshnal

2

생성자에 인수로 제공하는 변수는 null입니다.

NameSurferEntry 생성자에게 연락하는 경우 null을 입력하지 않았는지 확인하십시오.