回答編集履歴

6

追記

2017/09/21 10:19

投稿

LouiS0616
LouiS0616

スコア35660

test CHANGED
@@ -108,6 +108,8 @@
108
108
 
109
109
  do {
110
110
 
111
+ System.out.println(varName + "の入力は必須です。");
112
+
111
113
  ret = readPositiveDouble(varName);
112
114
 
113
115
  } while(ret == -1);

5

追記

2017/09/21 10:19

投稿

LouiS0616
LouiS0616

スコア35660

test CHANGED
@@ -2,11 +2,29 @@
2
2
 
3
3
  ---
4
4
 
5
- 検証したわけないです
5
+ コンストラクタ`Circle(double radius)`、入力値が処理されていないからです。
6
6
 
7
+ また、3.14という即値をここに書くのはおそらく仕様に反するでしょう。
8
+
9
+ > ```Java
10
+
11
+ > public Circle(double radius) {
12
+
13
+ > this.pi = 3.14;
14
+
15
+ > }
16
+
17
+ > ```
18
+
19
+
20
+
7
- 入力が省略された際に、省略されていないときの処理をスキップ出来ていないからです
21
+ さらに、入力が省略された際に、省略されていないときの処理をスキップ出来ていません
8
22
 
9
23
  if-elseで分離する必要があります。
24
+
25
+
26
+
27
+ 質問する際には、**どのように**上手くいかないのか書いておくとスムーズです。
10
28
 
11
29
 
12
30
 

4

修正

2017/09/21 10:14

投稿

LouiS0616
LouiS0616

スコア35660

test CHANGED
@@ -4,9 +4,9 @@
4
4
 
5
5
  検証したわけではないですが。
6
6
 
7
- ご提示のコード上手く動作しないのは、おそらく文字列nullと比較していからです。
7
+ 入力省略された際に、省略されていないとき処理スキップ出来ていないからです。
8
8
 
9
- 入力がなかったのならば、readLine()は空の文字列を返すはずです。
9
+ if-else分離る必要があります
10
10
 
11
11
 
12
12
 

3

回答の整理

2017/09/21 10:05

投稿

LouiS0616
LouiS0616

スコア35660

test CHANGED
@@ -1,3 +1,19 @@
1
+ 上手くいかない理由
2
+
3
+ ---
4
+
5
+ 検証したわけではないですが。
6
+
7
+ ご提示のコードが上手く動作しないのは、おそらく文字列をnullと比較しているからです。
8
+
9
+ 入力がなかったのならば、readLine()は空の文字列を返すはずです。
10
+
11
+
12
+
13
+ 楽をするなら
14
+
15
+ ---
16
+
1
17
  とりあえず、円周率の入力省略を感知できれば良いと仮定します。
2
18
 
3
19
 
@@ -58,16 +74,6 @@
58
74
 
59
75
 
60
76
 
61
- ---
62
-
63
- ちなみに...
64
-
65
- ご提示のコードが上手く動作しないのは、おそらく空列をnullと比較しているからです。
66
-
67
- 入力がなかったのならば、readLine()は空の文字列を返すはずです。
68
-
69
-
70
-
71
77
  ついでに
72
78
 
73
79
  ---

2

追記

2017/09/21 10:00

投稿

LouiS0616
LouiS0616

スコア35660

test CHANGED
@@ -65,3 +65,51 @@
65
65
  ご提示のコードが上手く動作しないのは、おそらく空列をnullと比較しているからです。
66
66
 
67
67
  入力がなかったのならば、readLine()は空の文字列を返すはずです。
68
+
69
+
70
+
71
+ ついでに
72
+
73
+ ---
74
+
75
+ 日頃から処理を細かく切り分ける癖をつけておくと、いろいろ工夫できます。
76
+
77
+ たとえば、入力の省略を禁止したり、
78
+
79
+ ```Java
80
+
81
+ private static double readPositiveDoubleByForce(String varName) throws IOException {
82
+
83
+ double ret;
84
+
85
+ do {
86
+
87
+ ret = readPositiveDouble(varName);
88
+
89
+ } while(ret == -1);
90
+
91
+ return ret;
92
+
93
+ }
94
+
95
+ ```
96
+
97
+
98
+
99
+ デフォルト値を設定したり。
100
+
101
+ ```Java
102
+
103
+ private static double readPositiveDouble(String varName, double defaultValue) throws IOException {
104
+
105
+ double ret = readPositiveDouble(varName);
106
+
107
+ return ret == -1 ? defaultValue : ret;
108
+
109
+ }
110
+
111
+ ```
112
+
113
+
114
+
115
+ 今回の課題の場合、後者は不適ですが。

1

成形

2017/09/21 09:58

投稿

LouiS0616
LouiS0616

スコア35660

test CHANGED
@@ -12,7 +12,7 @@
12
12
 
13
13
  while(true) {
14
14
 
15
- System.out.print( varName + "> " );
15
+ System.out.print(varName + "> ");
16
16
 
17
17
  try {
18
18
 
@@ -22,7 +22,7 @@
22
22
 
23
23
 
24
24
 
25
- double ret = Double.parseDouble( input );
25
+ double ret = Double.parseDouble(input);
26
26
 
27
27
  if(ret < 0) {
28
28
 
@@ -38,7 +38,7 @@
38
38
 
39
39
 
40
40
 
41
- } catch( NumberFormatException e ) {
41
+ } catch(NumberFormatException e) {
42
42
 
43
43
  System.out.println(varName + "は数値を入力してください。");
44
44