回答編集履歴
6
追記
answer
CHANGED
@@ -53,6 +53,7 @@
|
|
53
53
|
private static double readPositiveDoubleByForce(String varName) throws IOException {
|
54
54
|
double ret;
|
55
55
|
do {
|
56
|
+
System.out.println(varName + "の入力は必須です。");
|
56
57
|
ret = readPositiveDouble(varName);
|
57
58
|
} while(ret == -1);
|
58
59
|
return ret;
|
5
追記
answer
CHANGED
@@ -1,9 +1,18 @@
|
|
1
1
|
上手くいかない理由
|
2
2
|
---
|
3
|
+
コンストラクタ`Circle(double radius)`で、入力値が処理されていないからです。
|
4
|
+
また、3.14という即値をここに書くのはおそらく仕様に反するでしょう。
|
3
|
-
|
5
|
+
> ```Java
|
6
|
+
> public Circle(double radius) {
|
7
|
+
> this.pi = 3.14;
|
8
|
+
> }
|
9
|
+
> ```
|
10
|
+
|
4
|
-
入力が省略された際に、省略されていないときの処理をスキップ出来てい
|
11
|
+
さらに、入力が省略された際に、省略されていないときの処理をスキップ出来ていません。
|
5
12
|
if-elseで分離する必要があります。
|
6
13
|
|
14
|
+
質問する際には、**どのように**上手くいかないのか書いておくとスムーズです。
|
15
|
+
|
7
16
|
楽をするなら
|
8
17
|
---
|
9
18
|
とりあえず、円周率の入力省略を感知できれば良いと仮定します。
|
4
修正
answer
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
上手くいかない理由
|
2
2
|
---
|
3
3
|
検証したわけではないですが。
|
4
|
-
|
4
|
+
入力が省略された際に、省略されていないときの処理をスキップ出来ていないからです。
|
5
|
-
|
5
|
+
if-elseで分離する必要があります。
|
6
6
|
|
7
7
|
楽をするなら
|
8
8
|
---
|
3
回答の整理
answer
CHANGED
@@ -1,3 +1,11 @@
|
|
1
|
+
上手くいかない理由
|
2
|
+
---
|
3
|
+
検証したわけではないですが。
|
4
|
+
ご提示のコードが上手く動作しないのは、おそらく文字列をnullと比較しているからです。
|
5
|
+
入力がなかったのならば、readLine()は空の文字列を返すはずです。
|
6
|
+
|
7
|
+
楽をするなら
|
8
|
+
---
|
1
9
|
とりあえず、円周率の入力省略を感知できれば良いと仮定します。
|
2
10
|
|
3
11
|
こういう静的メソッドを組むと楽が出来るかもしれません。
|
@@ -28,11 +36,6 @@
|
|
28
36
|
使い方に関しては、そんなに難しくないので適宜試してみてください。
|
29
37
|
どのような処理をしているかも、じっくり考えればわかるはずです。
|
30
38
|
|
31
|
-
---
|
32
|
-
ちなみに...
|
33
|
-
ご提示のコードが上手く動作しないのは、おそらく空列をnullと比較しているからです。
|
34
|
-
入力がなかったのならば、readLine()は空の文字列を返すはずです。
|
35
|
-
|
36
39
|
ついでに
|
37
40
|
---
|
38
41
|
日頃から処理を細かく切り分ける癖をつけておくと、いろいろ工夫できます。
|
2
追記
answer
CHANGED
@@ -31,4 +31,28 @@
|
|
31
31
|
---
|
32
32
|
ちなみに...
|
33
33
|
ご提示のコードが上手く動作しないのは、おそらく空列をnullと比較しているからです。
|
34
|
-
入力がなかったのならば、readLine()は空の文字列を返すはずです。
|
34
|
+
入力がなかったのならば、readLine()は空の文字列を返すはずです。
|
35
|
+
|
36
|
+
ついでに
|
37
|
+
---
|
38
|
+
日頃から処理を細かく切り分ける癖をつけておくと、いろいろ工夫できます。
|
39
|
+
たとえば、入力の省略を禁止したり、
|
40
|
+
```Java
|
41
|
+
private static double readPositiveDoubleByForce(String varName) throws IOException {
|
42
|
+
double ret;
|
43
|
+
do {
|
44
|
+
ret = readPositiveDouble(varName);
|
45
|
+
} while(ret == -1);
|
46
|
+
return ret;
|
47
|
+
}
|
48
|
+
```
|
49
|
+
|
50
|
+
デフォルト値を設定したり。
|
51
|
+
```Java
|
52
|
+
private static double readPositiveDouble(String varName, double defaultValue) throws IOException {
|
53
|
+
double ret = readPositiveDouble(varName);
|
54
|
+
return ret == -1 ? defaultValue : ret;
|
55
|
+
}
|
56
|
+
```
|
57
|
+
|
58
|
+
今回の課題の場合、後者は不適ですが。
|
1
成形
answer
CHANGED
@@ -5,12 +5,12 @@
|
|
5
5
|
```Java
|
6
6
|
private static double readPositiveDouble(String varName) throws IOException {
|
7
7
|
while(true) {
|
8
|
-
System.out.print(
|
8
|
+
System.out.print(varName + "> ");
|
9
9
|
try {
|
10
10
|
String input = br.readLine();
|
11
11
|
if(input.length() == 0) return -1;
|
12
12
|
|
13
|
-
double ret = Double.parseDouble(
|
13
|
+
double ret = Double.parseDouble(input);
|
14
14
|
if(ret < 0) {
|
15
15
|
System.out.println(varName + "は正数を入力してください。");
|
16
16
|
continue;
|
@@ -18,7 +18,7 @@
|
|
18
18
|
|
19
19
|
return ret;
|
20
20
|
|
21
|
-
} catch(
|
21
|
+
} catch(NumberFormatException e) {
|
22
22
|
System.out.println(varName + "は数値を入力してください。");
|
23
23
|
}
|
24
24
|
}
|