前提・実現したいこと
以前javaプログラマーを2年ほどしていたものです。3年ほどブランクがあり、再びjavaやることになりました。
javaの復習のために対話的に文法を検索できるCUIツールを作ろうとしています。
仮にツール名をjava-cui-reference-toolの略でjcrtとします。
イメージとしては以下のようにコマンドプロンプトで呼び出して使えるようにしたいです。
>jcrt
こんにちは! これは java-cui-reference-toolです。ご用は?
数字で指定してください。
- 演算子について
- 条件分岐について
- ループ処理
......
のような感じで入力を受け取って出力するやりとりを繰り返そうとしています。
その実装のためにまずはexitという文字列をうけとるまでは文字列の入力を受け取り続け、受け取った文字列のまま出力するようにしようとしています。
発生している問題・エラーメッセージ
一回目のループは想定通り
・なにかタイプしてください:という出力をした後
・入力を待ち受け
・入力された文字列をそのまま表示
します。
ただ二回目のループ以降、例外をキャッチして「NoSuchElementExceptionだそうです」が表示され続けます。
なぜscanner.nextLine();は二週目以降で入力待ちをしないのでしょうか?
該当のソースコード
java
1public class Main { 2 3 /** 4 * @param args 5 */ 6 public static void main(String[] args) { 7 8 while (Main.startMainLoop()) {} 9 10 } 11 12 13 /** 14 * @return 15 */ 16 public static boolean startMainLoop() { 17 18 Scanner scanner = new Scanner(System.in); 19 String input = ""; 20 21 System.out.print("なにかタイプしてください:"); 22 try { 23 // nextLine()は一行分の入力を文字列として取得する 24 input = scanner.nextLine(); 25 } catch (NoSuchElementException e) { 26 System.out.println("NoSuchElementExceptionだそうです"); 27 } finally { 28 scanner.close(); 29 } 30 31 // 文字列のequalsメソッドはメソッド呼ぶ側のオブジェクトがnullだとぬるぽになる可能性がある。 32 if ("exit".equals(input)) { 33 System.exit(0); 34 } 35 36 System.out.println(input); 37 38 return true; 39 40 } 41}

回答1件
あなたの回答
tips
プレビュー