- - PR -
StringTokenizerの使用がうまくいきません(Nullが動作しない?)
| 投稿者 | 投稿内容 | ||||
|---|---|---|---|---|---|
|
投稿日時: 2004-03-14 18:23
こんにちは。
早速質問なのですが下のコードを実行 しようとしてもLoop(?)になってしまい ぬけられません。Nullが機能していないように 思われますが、解決方法がわかりません。 Readはどこまで読んで いるかのためにつけました。 初めは、HasMoreTokens()をつけていなかった のですが、過去ログよりつけなければいけないと いうことがわかりつけてみたのですが、それでも うまくいきません。 ******コード********** while ((s = in.readLine()) != null) { System.out.println("Read 8"); t = new StringTokenizer(s); int i=0; int j=0; System.out.println("Read 9"); if(t.hasMoreTokens()) { i = Integer.parseInt(t.nextToken()); } System.out.println("Read 10"); if(t.hasMoreTokens()) { j = Integer.parseInt(t.nextToken()); } System.out.println("Read 11"); if(t.hasMoreTokens()) { weight[i][j] = weight[j][i] = Integer.parseInt(t.nextToken()); } System.out.println("Read 12"); } *******実行結果******* 1 2 6 Read 8 Read 9 Read 10 Read 11 Read 12 0 1 10 Read 8 Read 9 Read 10 Read 11 Read 12 0 2 21 Read 8 Read 9 Read 10 Read 11 Read 12 Read 8 Read 9 Read 10 Read 11 Read 12 これより後ENTERを押してもずっとこれが 繰り返されます。 なにか解決方法を教えてください。 よろしくお願いします。 | ||||
|
投稿日時: 2004-03-14 18:38
in が参照しているのは System.in 等の標準入力ですか? だとしたら、in.readLine() が null を返すことはありませんよ。 ループの条件を見直されてはいかがでしょうか。 | ||||
|
投稿日時: 2004-03-14 18:48
すみません、きちんと書いていなくて。
inはBufferedReaderです。 BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); | ||||
|
投稿日時: 2004-03-14 19:50
この場合 System.in をラップしているだけですので、同じ事です。 〔追記〕 「in が参照しているのは・・・」 というのは妥当な表現ではありませんでしたね。 [ メッセージ編集済み 編集者: でゅうく 編集日時 2004-03-14 19:53 ] | ||||
|
投稿日時: 2004-03-14 20:52
すみません、同じことですね。
理解力に乏しくて(笑)。 とりあえず、直接プログラム上に 書くことで解決はできるのですが、 キーボードでの入力は無理なんでしょうか? ループの条件は変えようと思ったのですが どう変えてよいのかわかりません。 このループではグラフのデータを入力しており、 いつループを終わらせるかという条件の設定が 難しいです。 | ||||
|
投稿日時: 2004-03-14 21:21
キーボードでの入力が無理という事はありませんよ。 ループ条件が難しいのであれば、end 等と入力したらグラフデータの入力が終わりというように、仕様変更してはいかがですか? | ||||
|
投稿日時: 2004-03-15 11:56
終了条件を変えなくも、EOF を渡すことで readLine() が null を返し、ループを終了させることができます。 EOF を渡す方法は OS により異なりますが、一般的には、Windows 系の OS なら Ctrl-Z、UNIX 系の OS なら Ctrl-D を使います。 | ||||
|
投稿日時: 2004-03-15 15:17
あぁ! EOF 渡せましたね。
うっかりしてました。ごめんなさい。 注意点としては、Eclipse 等の IDE 上で実行すると、Ctrl-Z では EOF が渡せません。 | ||||
