回答編集履歴
1
修正
answer
CHANGED
@@ -9,9 +9,40 @@
|
|
9
9
|
|
10
10
|
オリジナルの方を見てみると、
|
11
11
|
`sc.hasNextLine()`
|
12
|
-
とあります。
|
12
|
+
とあります。そこからさらに `sc`が何者なのかを辿ると、
|
13
|
+
`Scanner sc = new Scanner(System.in);`
|
13
|
-
|
14
|
+
とあるので、`sc`は`Scanner`クラスと分かります。
|
14
15
|
|
16
|
+
その次には、`Scanner`クラスの[リファレンス](https://docs.oracle.com/javase/jp/8/docs/api/java/util/Scanner.html)を確認します。
|
15
|
-
(
|
17
|
+
`hasNextLine()`メソッドの欄を見ると、こうあります。
|
16
18
|
|
19
|
+
> public boolean hasNextLine()
|
20
|
+
このスキャナの入力に別の行がある場合はtrueを返します。
|
21
|
+
|
22
|
+
戻り値はbooleanで、内容は次の行があるかどうか、です。
|
23
|
+
|
24
|
+
ここまで行くと、`sc.hasNextLine()`の意味が解りますが、
|
25
|
+
`sc`の対象は`System.in`標準入力なのですこし厄介です。
|
26
|
+
標準入力はユーザーが入力し続ける限り、次の行が存在する一種の無限のストリームになっていますので、
|
27
|
+
次の行はずっとあり続けます(常に`true`)。
|
28
|
+
|
29
|
+
これを終了させるには、Windowsであれば`CTRL-Z`、UNIXやLinuxであれば`CTRL-D`を入力することで、
|
30
|
+
終了とみなされ、結果が`false`になります。
|
31
|
+
|
32
|
+
`sc.hasNextLine()` =「入力が続いているか」みたいな感じになります。
|
33
|
+
|
34
|
+
次はこの部分です。
|
35
|
+
`!sc.hasNextLine()`
|
36
|
+
これはシンプルに、`!`+`sc.hasNextLine()` です。
|
37
|
+
`!`は、論理演算を行う単項演算子で、真は偽に、偽は真にと、真偽値を反転します。
|
38
|
+
意味に置き換えれば、上のものを反転するので、
|
39
|
+
|
40
|
+
`!sc.hasNextLine()` =「入力が**終了した**か」になります。
|
41
|
+
|
42
|
+
`if (!sc.hasNextLine()) break;`
|
43
|
+
あとは、普通にif文ですので、
|
44
|
+
「入力が**終了した**なら、break」
|
45
|
+
となります。
|
46
|
+
|
47
|
+
これにより、すぐ外側の、`while(true)`の無限ループを抜けます。
|
17
|
-
ま
|
48
|
+
そこまで含めるなら、「入力が終了するまで繰り返せ」になります。
|