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

回答編集履歴

6

追記

2017/09/21 10:19

投稿

LouiS0616
LouiS0616

スコア35678

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

追記

2017/09/21 10:19

投稿

LouiS0616
LouiS0616

スコア35678

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

修正

2017/09/21 10:14

投稿

LouiS0616
LouiS0616

スコア35678

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

3

回答の整理

2017/09/21 10:05

投稿

LouiS0616
LouiS0616

スコア35678

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

追記

2017/09/21 10:00

投稿

LouiS0616
LouiS0616

スコア35678

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

成形

2017/09/21 09:58

投稿

LouiS0616
LouiS0616

スコア35678

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( varName + "> " );
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( input );
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( NumberFormatException e ) {
21
+ } catch(NumberFormatException e) {
22
22
  System.out.println(varName + "は数値を入力してください。");
23
23
  }
24
24
  }