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

回答編集履歴

2

入力がない場合の問題を修正

2020/04/04 13:49

投稿

kazuma-s
kazuma-s

スコア8222

answer CHANGED
@@ -46,4 +46,26 @@
46
46
  }
47
47
  }
48
48
  }
49
+ ```
50
+ **追記**
51
+ > ・入力が1つもない場合の演算結果は「1」とする
52
+
53
+ という仕様を満たしていませんでした。
54
+
55
+ while (!(str = br.readLine()).isEmpty())
56
+
57
+ while ((str = br.readLine()) != null && !str.isEmpty())
58
+ に修正してください。
59
+
60
+ 1行にまとめているのが分かりにくいなら、次のように書いてもいいでしょう。
61
+ ```Java
62
+ while (true) {
63
+ str = br.readLine();
64
+ if (str == null || str.isEmpty()) break;
65
+ try {
66
+ product *= Double.valueOf(str);
67
+ } catch (NumberFormatException e) {
68
+ System.out.println("数値を入力してください");
69
+ }
70
+ }
49
71
  ```

1

コードの追加

2020/04/04 13:49

投稿

kazuma-s
kazuma-s

スコア8222

answer CHANGED
@@ -19,4 +19,31 @@
19
19
  System.out.println("入力された値の積 : " + s);
20
20
  }
21
21
  }
22
+ ```
23
+
24
+ これで仕様を満たすかな?
25
+ ```Java
26
+ import java.io.*;
27
+
28
+ public class Exercise3 {
29
+ public static void main(String[] args) {
30
+ try {
31
+ BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
32
+ double product = 1;
33
+ String str;
34
+ while (!(str = br.readLine()).isEmpty())
35
+ try {
36
+ product *= Double.valueOf(str);
37
+ } catch (NumberFormatException e) {
38
+ System.out.println("数値を入力してください");
39
+ }
40
+ str = String.format("%,.16g", product);
41
+ if (str.indexOf('.') >= 0)
42
+ str = str.replaceAll("0*$", "").replaceAll("\.$", "");
43
+ System.out.println("入力された値の積 : " + str);
44
+ } catch (IOException e) {
45
+ System.out.println("入出力例外が発生しました");
46
+ }
47
+ }
48
+ }
22
49
  ```