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

回答編集履歴

3

推測と別解(追記)

2020/04/07 10:55

投稿

xebme
xebme

スコア1109

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

文言修正

2020/04/07 10:55

投稿

xebme
xebme

スコア1109

answer CHANGED
@@ -17,16 +17,16 @@
17
17
 
18
18
  やっていることを簡単に説明します。
19
19
  - `while`のループ条件は入力が`null`以外
20
- `CTL+Z+Enter`は入力が`null`になり`while`ループから抜ける。`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:`の後の`//teratail.com/questions/251709`はコメントとみなされます。`break https;`は`https`のついたブロックを退出するという意味。質問の回答としてラベルは本来必要ありません。`break;`だけで十分です。
29
+ ここでは`https:`というラベルを宣言。`https:`の後の`//teratail.com/questions/251709`はコメントとみなされます。`break https;`は`https`の付くブロックを退出する。質問の回答としてラベルは必要ありません。`break;`だけで十分です。
30
30
 
31
31
  **参考**
32
32
 

1

補足説明を追加

2020/04/06 09:05

投稿

xebme
xebme

スコア1109

answer CHANGED
@@ -1,16 +1,33 @@
1
1
  **どげんかせんといかん**
2
2
 
3
- `while`と`break`、`continue`は一緒に学習しましょう。せっかくすから、ラベルの使い方も覚えてください。
3
+ `while`と`break`、`continue`は一緒に学習しましょう。ついラベルの使い方も覚えてください。
4
4
 
5
5
  ```Java
6
- https://teratail.com/questions/251709
6
+ https://teratail.com/questions/251709
7
- while ((str = br.readLine()) != null) {
7
+ while ((str = br.readLine()) != null) {
8
- if (str.isEmpty())
8
+ if (str.isEmpty())
9
- break https; // 入力された値が空なら入力終了
9
+ break https; // 入力された値が空なら入力終了
10
- try {
10
+ try {
11
- product *= Double.valueOf(str); // 受け取った値を数値(Double type)に変換して変数"product"に代入
11
+ product *= Double.valueOf(str); // 受け取った値を数値(Double type)に変換して変数"product"に代入
12
- } catch (NumberFormatException e) { // 数値以外の入力なら例外発生
12
+ } catch (NumberFormatException e) { // 数値以外の入力なら例外発生
13
- System.out.println("数値を入力してください"); // その例外が発生したら出力
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)