回答編集履歴
2
swordoneさんのご指摘を元に(というかそのまま)コードを修正
answer
CHANGED
@@ -2,6 +2,10 @@
|
|
2
2
|
|
3
3
|
もう少しスッキリ書けると思いましたが、そうでも無かったです...
|
4
4
|
|
5
|
+
(追記)
|
6
|
+
swordoneさんのご指摘を元に(というかそのまま)コードを修正してみました。
|
7
|
+
かなりスッキリしましたね。
|
8
|
+
|
5
9
|
```lang-java
|
6
10
|
// Java8以降
|
7
11
|
|
@@ -17,21 +21,13 @@
|
|
17
21
|
return 0;
|
18
22
|
}
|
19
23
|
|
20
|
-
// 計算値に初期値:1を設定
|
21
|
-
int grade = 1;
|
22
|
-
// 年度初日を算出
|
24
|
+
// 入学年度初日を算出
|
23
|
-
LocalDate first =
|
25
|
+
LocalDate first = LocalDate.of(year, 4, 1);
|
24
|
-
if (first.isAfter(
|
26
|
+
if (first.isAfter(input)) {
|
25
|
-
//
|
27
|
+
// 入学年度の4月1日が未来日なら1年前の同日
|
26
28
|
first = first.minusYears(1);
|
27
29
|
}
|
28
|
-
// 年
|
30
|
+
// 開始する数(1)+(入学年度-当日年) ※intのmaxを超えるケースは無視
|
29
|
-
|
31
|
+
return 1 + (int)ChronoUnit.YEARS.between(first, today);
|
30
|
-
// 年度調整
|
31
|
-
if (MonthDay.from(input).isBefore(MonthDay.of(4, 1))) {
|
32
|
-
// 入力日付が4月1日より前なら+1
|
33
|
-
++grade;
|
34
|
-
}
|
35
|
-
return grade;
|
36
32
|
}
|
37
33
|
```
|
1
変数名に違和感があったのでコードとコメントを一部修正
answer
CHANGED
@@ -17,8 +17,8 @@
|
|
17
17
|
return 0;
|
18
18
|
}
|
19
19
|
|
20
|
-
//
|
20
|
+
// 計算値に初期値:1を設定
|
21
|
-
int
|
21
|
+
int grade = 1;
|
22
22
|
// 年度初日を算出
|
23
23
|
LocalDate first = today.withMonth(4).withDayOfMonth(1);
|
24
24
|
if (first.isAfter(today)) {
|
@@ -26,12 +26,12 @@
|
|
26
26
|
first = first.minusYears(1);
|
27
27
|
}
|
28
28
|
// 年の差分を加算 (intのmaxを超えるケースは無視)
|
29
|
-
|
29
|
+
grade += ChronoUnit.YEARS.between(input, first);
|
30
30
|
// 年度調整
|
31
31
|
if (MonthDay.from(input).isBefore(MonthDay.of(4, 1))) {
|
32
32
|
// 入力日付が4月1日より前なら+1
|
33
|
-
++
|
33
|
+
++grade;
|
34
34
|
}
|
35
|
-
return
|
35
|
+
return grade;
|
36
36
|
}
|
37
37
|
```
|