質問するログイン新規登録

回答編集履歴

2

いろいろ追記

2020/07/03 09:47

投稿

YufanLou
YufanLou

スコア466

answer CHANGED
@@ -13,4 +13,79 @@
13
13
  }
14
14
  ```
15
15
 
16
- 無限ループなので、止めるのはターミナルで実行してるときCtrl-Cを押してください。ウィンドウで実行してるときウィンドウを閉めればいいです。
16
+ 無限ループなので、止めるのはターミナルで実行してるときCtrl-Cを押してください。ウィンドウで実行してるときウィンドウを閉めればいいです。
17
+
18
+ ### 追記
19
+
20
+ 終了キーワードを設定したいなら、例えば`exit`にすると、こちらになります。
21
+
22
+ ```java
23
+ import java.io.*;
24
+ class Main
25
+ {
26
+ public static void main(String args[]) throws IOException
27
+ {
28
+ BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
29
+ while (true) {
30
+ String s = br.readLine();
31
+ if ("exit".equals(s)) {
32
+ System.exit(0);
33
+ }
34
+ System.out.println(s);
35
+ }
36
+ }
37
+ }
38
+ ```
39
+
40
+ 機に乗ってroot_jpさんのtry文法も紹介します。
41
+
42
+ ```java
43
+ import java.io.*;
44
+ class Main
45
+ {
46
+ public static void main(String args[])
47
+ {
48
+ try(BufferedReader br = new BufferedReader(new InputStreamReader(System.in))) {
49
+ while (true) {
50
+ String s = br.readLine();
51
+ if ("exit".equals(s)) {
52
+ System.exit(0);
53
+ }
54
+ System.out.println(s);
55
+ }
56
+ }
57
+ }
58
+ }
59
+ ```
60
+
61
+ tryの後のカッコにリソースを構築すれば、それらのリソースをtryが終わってから自動的に解放します。こちらには気にしなくてもいいですが、サーバーとか長いループの中にリソースを構築するコードには不可欠なものです。
62
+
63
+ もっと慎重にすれば、BufferedReader を何も読み込めない状況も処理しましょう。その場合はreadLine()の戻り値がnullになりますので、停止条件に追加します。
64
+
65
+ ```java
66
+ import java.io.*;
67
+ class Main
68
+ {
69
+ public static void main(String args[])
70
+ {
71
+ try(BufferedReader br = new BufferedReader(new InputStreamReader(System.in))) {
72
+ while (true) {
73
+ String s = br.readLine();
74
+ if (s == null || "exit".equals(s)) {
75
+ System.exit(0);
76
+ }
77
+ System.out.println(s);
78
+ }
79
+ }
80
+ }
81
+ }
82
+ ```
83
+
84
+ 空行のままEnterを入力することは"\n"を読み込んで空文字列を返しますので、読み込めない状況ではありません。読み込めない状況はパイプでファイルをプログラムに導入しファイルの最後につく時です。例えば、
85
+
86
+ ```
87
+ touch text.txt
88
+ java Main.jar < text.txt
89
+ ```
90
+
91
+ こうして空ファイルをプログラムに導入する場合、何も読み込めないため、nullをprintlnしようとする時NullPointerExceptionを投げてしまいます。上記の通り s == null の場合exitすれば大丈夫です。

1

止める方法追加

2020/07/03 09:47

投稿

YufanLou
YufanLou

スコア466

answer CHANGED
@@ -11,4 +11,6 @@
11
11
  }
12
12
  }
13
13
  }
14
- ```
14
+ ```
15
+
16
+ 無限ループなので、止めるのはターミナルで実行してるときCtrl-Cを押してください。ウィンドウで実行してるときウィンドウを閉めればいいです。