回答編集履歴
3
推測と別解(追記)
answer
CHANGED
@@ -30,4 +30,30 @@
|
|
30
30
|
|
31
31
|
**参考**
|
32
32
|
|
33
|
-
わかりやすい解説をあげます。[Javaでbreak文/continue文/ラベル](https://www.sw-mono.blog/entry/2019/07/21/182506)
|
33
|
+
わかりやすい解説をあげます。[Javaでbreak文/continue文/ラベル](https://www.sw-mono.blog/entry/2019/07/21/182506)
|
34
|
+
|
35
|
+
###
|
36
|
+
**推測と別解(追記)**
|
37
|
+
|
38
|
+
試したことを読むと、`while`ブロックをどう記述するか決めかねているように思えます。そこで仕様が「数字を入力する都度、積を表示する」ものとして別の回答を追記します。数値以外なら`continue`を使ってループをやり直します。
|
39
|
+
|
40
|
+
```Java
|
41
|
+
try (BufferedReader br = new BufferedReader(new InputStreamReader(System.in))) {// 入力
|
42
|
+
double product = 1;// initial value
|
43
|
+
for (String str;(str = br.readLine()) != null && !str.isEmpty();) { // 入力された値が空なら入力終了
|
44
|
+
try {
|
45
|
+
product *= Double.valueOf(str);// 受け取った値を数値(Double type)に変換して変数"product"に代入
|
46
|
+
} catch (NumberFormatException e) {// 数値以外の入力なら例外発生
|
47
|
+
System.out.println("数値を入力してください");// その例外が発生したら出力
|
48
|
+
continue;
|
49
|
+
}
|
50
|
+
str = String.format("%,.16g", product);// 積算された値をString.format methodで編集してカンマ区切り
|
51
|
+
if (str.indexOf('.') >= 0)// search index of "."
|
52
|
+
str = str.replaceAll("0*$", "").replaceAll("\.$", "");
|
53
|
+
System.out.println("入力された値の積 : " + str);
|
54
|
+
}
|
55
|
+
} catch (IOException e) {
|
56
|
+
System.out.println("入出力例外が発生しました");
|
57
|
+
}
|
58
|
+
```
|
59
|
+
これがNGなら、正しい仕様を追記してください。この問題のテストケースがありませんか?
|
2
文言修正
answer
CHANGED
@@ -17,16 +17,16 @@
|
|
17
17
|
|
18
18
|
やっていることを簡単に説明します。
|
19
19
|
- `while`のループ条件は入力が`null`以外
|
20
|
-
`CTL+Z+Enter`は入力が`null`
|
20
|
+
`CTL+Z+Enter`は入力が`null`、`while`ループから抜ける。`null`以外ならループに入る
|
21
21
|
- 空文字列は`str.isEmpty()`で判定
|
22
22
|
空文字列ならば`break`でループを抜ける
|
23
23
|
- 空文字以外なら文字列のdouble変換を行う
|
24
24
|
|
25
25
|
**ラベル**
|
26
26
|
- `break`/`continue`はラベルを指定できる
|
27
|
-
- ラベルは`while`/`for`などのネストがあるとき、内側のループから外側のループに制御を
|
27
|
+
- ラベルは`while`/`for`などのネストがあるとき、内側のループから外側のループに制御を移すときに使う
|
28
28
|
|
29
|
-
ここでは`https:`というラベルを宣言。`https:`の後
|
29
|
+
ここでは`https:`というラベルを宣言。`https:`の後の`//teratail.com/questions/251709`はコメントとみなされます。`break https;`は`https`の付くブロックを退出する。質問の回答としてラベルは必要ありません。`break;`だけで十分です。
|
30
30
|
|
31
31
|
**参考**
|
32
32
|
|
1
補足説明を追加
answer
CHANGED
@@ -1,16 +1,33 @@
|
|
1
1
|
**どげんかせんといかん**
|
2
2
|
|
3
|
-
`while`と`break`、`continue`は一緒に学習しましょう。
|
3
|
+
`while`と`break`、`continue`は一緒に学習しましょう。ついでにラベルの使い方も覚えてください。
|
4
4
|
|
5
5
|
```Java
|
6
|
-
|
6
|
+
https://teratail.com/questions/251709
|
7
|
-
|
7
|
+
while ((str = br.readLine()) != null) {
|
8
|
-
|
8
|
+
if (str.isEmpty())
|
9
|
-
|
9
|
+
break https; // 入力された値が空なら入力終了
|
10
|
-
|
10
|
+
try {
|
11
|
-
|
11
|
+
product *= Double.valueOf(str); // 受け取った値を数値(Double type)に変換して変数"product"に代入
|
12
|
-
|
12
|
+
} catch (NumberFormatException e) { // 数値以外の入力なら例外発生
|
13
|
-
|
13
|
+
System.out.println("数値を入力してください"); // その例外が発生したら出力
|
14
|
-
|
14
|
+
}
|
15
|
-
|
15
|
+
}
|
16
|
-
```
|
16
|
+
```
|
17
|
+
|
18
|
+
やっていることを簡単に説明します。
|
19
|
+
- `while`のループ条件は入力が`null`以外
|
20
|
+
`CTL+Z+Enter`は入力が`null`になり`while`ループから抜ける。`null`以外ならループに入る
|
21
|
+
- 空文字列は`str.isEmpty()`で判定
|
22
|
+
空文字列ならば`break`でループを抜ける
|
23
|
+
- 空文字以外なら文字列のdouble変換を行う
|
24
|
+
|
25
|
+
**ラベル**
|
26
|
+
- `break`/`continue`はラベルを指定できる
|
27
|
+
- ラベルは`while`/`for`などのネストがあるとき、内側のループから外側のループに制御を戻すときに使う
|
28
|
+
|
29
|
+
ここでは`https:`というラベルを宣言。`https:`の後ろの`//teratail.com/questions/251709`はコメントとみなされます。`break https;`は`https`のついたブロックを退出するという意味。質問の回答としてラベルは本来必要ありません。`break;`だけで十分です。
|
30
|
+
|
31
|
+
**参考**
|
32
|
+
|
33
|
+
わかりやすい解説をあげます。[Javaでbreak文/continue文/ラベル](https://www.sw-mono.blog/entry/2019/07/21/182506)
|