回答編集履歴

3

推測と別解(追記)

2020/04/07 10:55

投稿

xebme
xebme

スコア1083

test CHANGED
@@ -63,3 +63,55 @@
63
63
 
64
64
 
65
65
  わかりやすい解説をあげます。[Javaでbreak文/continue文/ラベル](https://www.sw-mono.blog/entry/2019/07/21/182506)
66
+
67
+
68
+
69
+ ###
70
+
71
+ **推測と別解(追記)**
72
+
73
+
74
+
75
+ 試したことを読むと、`while`ブロックをどう記述するか決めかねているように思えます。そこで仕様が「数字を入力する都度、積を表示する」ものとして別の回答を追記します。数値以外なら`continue`を使ってループをやり直します。
76
+
77
+
78
+
79
+ ```Java
80
+
81
+ try (BufferedReader br = new BufferedReader(new InputStreamReader(System.in))) {// 入力
82
+
83
+ double product = 1;// initial value
84
+
85
+ for (String str;(str = br.readLine()) != null && !str.isEmpty();) { // 入力された値が空なら入力終了
86
+
87
+ try {
88
+
89
+ product *= Double.valueOf(str);// 受け取った値を数値(Double type)に変換して変数"product"に代入
90
+
91
+ } catch (NumberFormatException e) {// 数値以外の入力なら例外発生
92
+
93
+ System.out.println("数値を入力してください");// その例外が発生したら出力
94
+
95
+ continue;
96
+
97
+ }
98
+
99
+ str = String.format("%,.16g", product);// 積算された値をString.format methodで編集してカンマ区切り
100
+
101
+ if (str.indexOf('.') >= 0)// search index of "."
102
+
103
+ str = str.replaceAll("0*$", "").replaceAll("\.$", "");
104
+
105
+ System.out.println("入力された値の積 : " + str);
106
+
107
+ }
108
+
109
+ } catch (IOException e) {
110
+
111
+ System.out.println("入出力例外が発生しました");
112
+
113
+ }
114
+
115
+ ```
116
+
117
+ これがNGなら、正しい仕様を追記してください。この問題のテストケースがありませんか?

2

文言修正

2020/04/07 10:55

投稿

xebme
xebme

スコア1083

test CHANGED
@@ -36,7 +36,7 @@
36
36
 
37
37
  - `while`のループ条件は入力が`null`以外
38
38
 
39
- `CTL+Z+Enter`は入力が`null`になり`while`ループから抜ける。`null`以外ならループに入る
39
+ `CTL+Z+Enter`は入力が`null``while`ループから抜ける。`null`以外ならループに入る
40
40
 
41
41
  - 空文字列は`str.isEmpty()`で判定
42
42
 
@@ -50,11 +50,11 @@
50
50
 
51
51
  - `break`/`continue`はラベルを指定できる
52
52
 
53
- - ラベルは`while`/`for`などのネストがあるとき、内側のループから外側のループに制御をすときに使う
53
+ - ラベルは`while`/`for`などのネストがあるとき、内側のループから外側のループに制御をすときに使う
54
54
 
55
55
 
56
56
 
57
- ここでは`https:`というラベルを宣言。`https:`の後の`//teratail.com/questions/251709`はコメントとみなされます。`break https;`は`https`のついたブロックを退出するという意味。質問の回答としてラベルは本来必要ありません。`break;`だけで十分です。
57
+ ここでは`https:`というラベルを宣言。`https:`の後の`//teratail.com/questions/251709`はコメントとみなされます。`break https;`は`https`の付くブロックを退出する。質問の回答としてラベルは必要ありません。`break;`だけで十分です。
58
58
 
59
59
 
60
60
 

1

補足説明を追加

2020/04/06 09:05

投稿

xebme
xebme

スコア1083

test CHANGED
@@ -2,30 +2,64 @@
2
2
 
3
3
 
4
4
 
5
- `while`と`break`、`continue`は一緒に学習しましょう。せっかくすから、ラベルの使い方も覚えてください。
5
+ `while`と`break`、`continue`は一緒に学習しましょう。ついラベルの使い方も覚えてください。
6
6
 
7
7
 
8
8
 
9
9
  ```Java
10
10
 
11
- https://teratail.com/questions/251709
11
+ https://teratail.com/questions/251709
12
12
 
13
- while ((str = br.readLine()) != null) {
13
+ while ((str = br.readLine()) != null) {
14
14
 
15
- if (str.isEmpty())
15
+ if (str.isEmpty())
16
16
 
17
- break https; // 入力された値が空なら入力終了
17
+ break https; // 入力された値が空なら入力終了
18
18
 
19
- try {
19
+ try {
20
20
 
21
- product *= Double.valueOf(str); // 受け取った値を数値(Double type)に変換して変数"product"に代入
21
+ product *= Double.valueOf(str); // 受け取った値を数値(Double type)に変換して変数"product"に代入
22
22
 
23
- } catch (NumberFormatException e) { // 数値以外の入力なら例外発生
23
+ } catch (NumberFormatException e) { // 数値以外の入力なら例外発生
24
24
 
25
- System.out.println("数値を入力してください"); // その例外が発生したら出力
25
+ System.out.println("数値を入力してください"); // その例外が発生したら出力
26
26
 
27
- }
27
+ }
28
28
 
29
- }
29
+ }
30
30
 
31
31
  ```
32
+
33
+
34
+
35
+ やっていることを簡単に説明します。
36
+
37
+ - `while`のループ条件は入力が`null`以外
38
+
39
+ `CTL+Z+Enter`は入力が`null`になり`while`ループから抜ける。`null`以外ならループに入る
40
+
41
+ - 空文字列は`str.isEmpty()`で判定
42
+
43
+  空文字列ならば`break`でループを抜ける
44
+
45
+ - 空文字以外なら文字列のdouble変換を行う
46
+
47
+
48
+
49
+ **ラベル**
50
+
51
+ - `break`/`continue`はラベルを指定できる
52
+
53
+ - ラベルは`while`/`for`などのネストがあるとき、内側のループから外側のループに制御を戻すときに使う
54
+
55
+
56
+
57
+ ここでは`https:`というラベルを宣言。`https:`の後ろの`//teratail.com/questions/251709`はコメントとみなされます。`break https;`は`https`のついたブロックを退出するという意味。質問の回答としてラベルは本来必要ありません。`break;`だけで十分です。
58
+
59
+
60
+
61
+ **参考**
62
+
63
+
64
+
65
+ わかりやすい解説をあげます。[Javaでbreak文/continue文/ラベル](https://www.sw-mono.blog/entry/2019/07/21/182506)