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이 다른 방법에 의해 호출되는 것입니다
그러나 매개 변수 blah
을 NameSurferEntry
으로 전달하면 NameSurferEntry
은 매개 변수를 초기화 한 다음 blah
을 올바르게 잃었습니까? 내 임펄스가 line
을 메서드 외부의 ivar로 초기화하는 것입니다. 그러나 다시 NullPointerException
메시지가 표시되고 다시 시작되었습니다. 아!
생각하십니까?
질문이 이해가 가지 않습니다. 마지막으로 게시 된 코드는'NameSurferEntry' 생성자가 null이 아닌 값으로 만 호출되도록합니다. 그래서 모든 것이 잘되어야합니다 ... 텍스트의 벽을 줄이고 질문이 실제로 무엇인지 분명히하십시오. 그것이 원래 질문이 아닐 때 그대로 여기에두고 다른 질문을하십시오. –
죄송합니다. 나는 StackOverflow를 처음 사용하고 아직도 어떻게 동작하는지 파악하고있다. 나는 다음에 더 잘 알 것이다. –