私はJavaでiTunes UスタンフォードCS106aコースをやっていて、それを愛していますが、この名前サーファープログラムで耳を傾けています。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());
}
}
を使用する場合、私は二行目(int型endOfNameなど)の一時停止/ NullPointerExceptionが取得 "NameSurferEntry(String)を行。:16" と言うこと。
私はこのようにそれを実行しようとした場合
: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の本体で初期化し、それを修正しました。 (私が宣言し、イニシャルとしてline
を初期化する前に、なぜ私が初期化する場所が違いを生むのか分かりませんが、そこにあります)
次のエラーは48行までです!だから、すぐに私から再び聞こえるかもしれません....私は自分でそれを理解できるかどうかを見ています。再度、感謝します。
おっと
それほど速いです。
line
をNameSurferEntry本体の実際のStringに初期化すると、すべて正常に機能します。
問題がNameSurferEntryが別の方法で呼び出されたということです。
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
の実際のファイルを提供しますので、私たちはそこに大丈夫だ、別のメソッドによって呼び出されます。)
パラメータblah
をNameSurferEntry
に渡して、NameSurferEntry
がパラメータを初期化してから、blah
を失ってしまいましたか?私の衝動は方法の外のivarとしてline
を初期化することです、しかし私はNullPointerException
メッセージをもう一度得て、私はどこで始めました。アー!
思考?
私はあなたの質問を理解していません。最後に投稿されたコードは、 'NameSurferEntry'コンストラクタがnull以外の値でのみ呼び出されることを保証します。だからすべてがうまくいくはずです...テキストの壁を小さくして、あなたの質問が本当に何であるかを明確にしてください。それが元の質問でないときは、そのままここに置き、別の質問をしてください。 –
申し訳ありません。私はStackOverflowを初めて使っていて、それがどのように動作するかをまだ考えています。次回はよく分かるよ。 –