回答編集履歴

4

当日でも0歳と出るように修正

2020/04/21 08:30

投稿

GqewG9aG7S
GqewG9aG7S

スコア150

test CHANGED
@@ -72,7 +72,7 @@
72
72
 
73
73
 
74
74
 
75
- if (nowDate.compareTo(localBirthdate) > 0) {
75
+ if (nowDate.compareTo(localBirthdate) >= 0) {
76
76
 
77
77
  // 年齢を計算する
78
78
 

3

1年以内の未来を指定すると0歳と出る問題を修正

2020/04/21 08:30

投稿

GqewG9aG7S
GqewG9aG7S

スコア150

test CHANGED
@@ -16,86 +16,82 @@
16
16
 
17
17
  public class Age {
18
18
 
19
- public static void main(String[] args) {
19
+ public static void main(String[] args) {
20
20
 
21
21
 
22
22
 
23
- //引数が1つであることを確認し、違った場合エラー(これがないと、引数がなかった場合にOut ofなんとかexceptionが出ます)
23
+ // 引数が1つであることを確認し、違った場合エラー(これがないと、引数がなかった場合にOut ofなんとかexceptionが出ます)
24
24
 
25
- //lengthは、その配列の長さをintで返す?ものです。
25
+ // lengthは、その配列の長さをintで返す?ものです。
26
26
 
27
- //コンパイルエラーが出たのは、Stringしか受け付けない関数にintを渡したからかと思います。
27
+ // コンパイルエラーが出たのは、Stringしか受け付けない関数にintを渡したからかと思います。
28
28
 
29
- if (args.length != 1) {
29
+ if (args.length != 1) {
30
30
 
31
- System.err.println("must have only 1 argument");
31
+ System.err.println("must have only 1 argument");
32
32
 
33
- return;
33
+ return;
34
34
 
35
- }
35
+ }
36
36
 
37
37
 
38
38
 
39
- DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy/MM/dd");
39
+ DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy/MM/dd");
40
-
41
-
42
-
43
- LocalDate localBirthdate;
44
-
45
- // 生年月日を表す文字列から、LocalDateを生成
46
-
47
- try {
48
-
49
- //argsは配列なので、[]で~~項目番号?(呼び方わからん)~~インデックスを指定して取り出します。
50
-
51
- //その番号は最初の方から0,1,2,3...と続いていきます。
52
-
53
- //今回は1つ目を使うので、args[0]を指定すれば、一つ目の引数が使えます。
54
-
55
- localBirthdate = LocalDate.parse(args[0], formatter);
56
-
57
- }
58
-
59
- catch ( DateTimeParseException e )
60
-
61
- {
62
-
63
- System.err.println("Error");
64
-
65
- System.err.println(e);
66
-
67
- return;
68
-
69
- }
70
40
 
71
41
 
72
42
 
73
- // 現在の日付を取得
43
+ LocalDate localBirthdate;
74
44
 
45
+ // 生年月日を表す文字列から、LocalDateを生成
46
+
47
+ try {
48
+
49
+ // argsは配列なので、[]で~~項目番号?(呼び方わからん)~~インデックスを指定して取り出します。
50
+
51
+ // その番号は最初の方から0,1,2,3...と続いていきます。
52
+
53
+ // 今回は1つ目を使うので、args[0]を指定すれば、一つ目の引数が使えます。
54
+
75
- LocalDate nowDate = LocalDate.now();
55
+ localBirthdate = LocalDate.parse(args[0], formatter);
56
+
57
+ } catch (DateTimeParseException e) {
58
+
59
+ System.err.println("Error");
60
+
61
+ System.err.println(e);
62
+
63
+ return;
64
+
65
+ }
76
66
 
77
67
 
78
68
 
79
- // 年齢計算する
69
+ // 現在の日付取得
80
70
 
81
- long age = ChronoUnit.YEARS.between(localBirthdate, nowDate);
71
+ LocalDate nowDate = LocalDate.now();
82
72
 
83
73
 
84
74
 
85
- if (age >= 0) {
75
+ if (nowDate.compareTo(localBirthdate) > 0) {
86
76
 
87
- // 年齢
77
+ // 年齢を計算する
88
78
 
89
- System.out.println("年齢: " + age);
79
+ long age = ChronoUnit.YEARS.between(localBirthdate, nowDate);
90
80
 
91
- } else {
81
+ // 年齢
92
82
 
93
- System.err.println("The date is the future");
83
+ System.out.println("年齢: " + age);
94
84
 
95
- }
85
+ } else {
96
86
 
87
+ System.err.println("The date is the future");
88
+
97
- }
89
+ }
90
+
91
+ }
98
92
 
99
93
  }
100
94
 
95
+
96
+
101
97
  ```

2

エラーの解消

2020/04/21 08:28

投稿

GqewG9aG7S
GqewG9aG7S

スコア150

test CHANGED
@@ -1,12 +1,14 @@
1
1
  コピーして改変させてもらいました。
2
2
 
3
- 動作確認
3
+ 動作確認済み
4
4
 
5
5
  ```Java
6
6
 
7
7
  import java.time.LocalDate;
8
8
 
9
9
  import java.time.format.DateTimeFormatter;
10
+
11
+ import java.time.format.DateTimeParseException;
10
12
 
11
13
  import java.time.temporal.ChronoUnit;
12
14
 
@@ -16,7 +18,7 @@
16
18
 
17
19
  public static void main(String[] args) {
18
20
 
19
-
21
+
20
22
 
21
23
  //引数が1つであることを確認し、違った場合エラー(これがないと、引数がなかった場合にOut ofなんとかexceptionが出ます)
22
24
 
@@ -32,23 +34,25 @@
32
34
 
33
35
  }
34
36
 
35
-
37
+
36
38
 
37
39
  DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy/MM/dd");
38
40
 
41
+
39
42
 
43
+ LocalDate localBirthdate;
40
44
 
41
45
  // 生年月日を表す文字列から、LocalDateを生成
42
46
 
43
47
  try {
44
48
 
45
-        //argsは配列なので、[]で~~項目番号?(呼び方わからん)~~インデックスを指定して取り出します。
49
+ //argsは配列なので、[]で~~項目番号?(呼び方わからん)~~インデックスを指定して取り出します。
46
50
 
47
-        //その番号は最初の方から0,1,2,3...と続いていきます。
51
+ //その番号は最初の方から0,1,2,3...と続いていきます。
48
52
 
49
53
  //今回は1つ目を使うので、args[0]を指定すれば、一つ目の引数が使えます。
50
54
 
51
- LocalDate localBirdhdate = LocalDate.parse(args[0], formatter);
55
+ localBirthdate = LocalDate.parse(args[0], formatter);
52
56
 
53
57
  }
54
58
 
@@ -74,7 +78,7 @@
74
78
 
75
79
  // 年齢を計算する
76
80
 
77
- long age = ChronoUnit.YEARS.between(localBirdhdate, nowDate);
81
+ long age = ChronoUnit.YEARS.between(localBirthdate, nowDate);
78
82
 
79
83
 
80
84
 

1

用語調べてきた

2020/04/21 07:13

投稿

GqewG9aG7S
GqewG9aG7S

スコア150

test CHANGED
@@ -42,7 +42,7 @@
42
42
 
43
43
  try {
44
44
 
45
-        //argsは配列?だっけ?そんやつなので、[]で項目番号?(呼び方わからん)を指定して取り出します。
45
+        //argsは配列なので、[]で~~項目番号?(呼び方わからん)~~インデックスを指定して取り出します。
46
46
 
47
47
         //その番号は最初の方から0,1,2,3...と続いていきます。
48
48