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

質問編集履歴

4

修正中コードの追記3

2020/04/21 06:56

投稿

fall
fall

スコア12

title CHANGED
File without changes
body CHANGED
@@ -42,19 +42,21 @@
42
42
  public class Age {
43
43
  public static void main(String[] args) {
44
44
 
45
-
46
- int birthdate = args[0];
45
+ if (args.length != 1) {
46
+ System.err.println("must have only 1 argument");
47
+ return;
48
+ }
47
49
 
48
50
  DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy/MM/dd");
49
51
 
50
- LocalDate localBirdhdate = LocalDate.parse(birthdate, formatter);
52
+ // LocalDateを生成
51
-
52
53
  try {
53
- args.length;
54
+ LocalDate localBirdhdate = LocalDate.parse(args[0], formatter);
54
55
  }
55
- catch ( DateTimeParseException ne )
56
+ catch ( DateTimeParseException e )
56
57
  {
57
58
  System.err.println("Error");
59
+ System.err.println(e);
58
60
  return;
59
61
  }
60
62
 
@@ -64,10 +66,16 @@
64
66
  // 年齢を計算する
65
67
  long age = ChronoUnit.YEARS.between(localBirdhdate, nowDate);
66
68
 
69
+ if (age >= 0) {
67
- // 年齢
70
+ // 年齢
68
- System.out.println("年齢: " + age);
71
+ System.out.println("年齢: " + age);
72
+ } else {
73
+ System.err.println("The date is the future");
74
+ }
69
75
  }
70
76
  }
77
+ }
78
+ }
71
79
 
72
80
 
73
81
  ```

3

修正中コードの追記2

2020/04/21 06:56

投稿

fall
fall

スコア12

title CHANGED
File without changes
body CHANGED
@@ -42,16 +42,19 @@
42
42
  public class Age {
43
43
  public static void main(String[] args) {
44
44
 
45
+
46
+ int birthdate = args[0];
47
+
45
48
  DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy/MM/dd");
46
49
 
47
- // 生年月日を表す文字列から、LocalDateを生成
50
+ LocalDate localBirdhdate = LocalDate.parse(birthdate, formatter);
51
+
48
52
  try {
49
- LocalDate localBirdhdate = LocalDate.parse(args.length, formatter);
53
+ args.length;
50
54
  }
51
- catch ( DateTimeParseException e )
55
+ catch ( DateTimeParseException ne )
52
56
  {
53
57
  System.err.println("Error");
54
- System.err.println(e);
55
58
  return;
56
59
  }
57
60
 
@@ -66,4 +69,5 @@
66
69
  }
67
70
  }
68
71
 
72
+
69
73
  ```

2

修正中コードの追記

2020/04/21 06:22

投稿

fall
fall

スコア12

title CHANGED
File without changes
body CHANGED
@@ -31,4 +31,39 @@
31
31
  System.out.println("年齢: " + age);
32
32
  }
33
33
  }
34
+ ```
35
+
36
+
37
+ ```修正中コード
38
+ import java.time.LocalDate;
39
+ import java.time.format.DateTimeFormatter;
40
+ import java.time.temporal.ChronoUnit;
41
+
42
+ public class Age {
43
+ public static void main(String[] args) {
44
+
45
+ DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy/MM/dd");
46
+
47
+ // 生年月日を表す文字列から、LocalDateを生成
48
+ try {
49
+ LocalDate localBirdhdate = LocalDate.parse(args.length, formatter);
50
+ }
51
+ catch ( DateTimeParseException e )
52
+ {
53
+ System.err.println("Error");
54
+ System.err.println(e);
55
+ return;
56
+ }
57
+
58
+ // 現在の日付を取得
59
+ LocalDate nowDate = LocalDate.now();
60
+
61
+ // 年齢を計算する
62
+ long age = ChronoUnit.YEARS.between(localBirdhdate, nowDate);
63
+
64
+ // 年齢
65
+ System.out.println("年齢: " + age);
66
+ }
67
+ }
68
+
34
69
  ```

1

引数の扱いの修正

2020/04/21 05:55

投稿

fall
fall

スコア12

title CHANGED
@@ -1,1 +1,1 @@
1
- [Java]生年月日を渡したら年齢を計算するプログラムのエラーパターン
1
+ [Java]生年月日を渡したら年齢を計算するプログラム
body CHANGED
@@ -1,7 +1,7 @@
1
- 引数として生年月日を渡したらそれを元に年齢を計算するプログラムを作りました
1
+ 引数として生年月日を渡したらそれを元に年齢を計算するプログラムを作りです
2
- 生年月日から年齢を計算することは出来ましたが、ここから生年月日が不正な場合のエラーパターンを作成するにはどうすればよいでしょうか。
2
+ 予め生年月日を記載して年齢を計算することは出来ましたが、ここから生年月日を渡す(args)処理と生年月日が不正な場合のエラーパターンを作成するにはどうすればよいでしょうか。
3
3
  生年月日が数値以外の場合、現在の日付より未来の場合など起こりうるあらゆるパターンを作りたいです。
4
- また、エラーの場合メッセージも出すようにしたいです。
4
+ また、エラーの場合にはメッセージも出すようにしたいです。
5
5
  ご教示いただけますと幸いです。
6
6
 
7
7