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

回答編集履歴

2

swordoneさんのご指摘を元に(というかそのまま)コードを修正

2015/11/16 03:26

投稿

argius
argius

スコア9396

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 = today.withMonth(4).withDayOfMonth(1);
25
+ LocalDate first = LocalDate.of(year, 4, 1);
24
- if (first.isAfter(today)) {
26
+ if (first.isAfter(input)) {
25
- // 年の4月1日が未来日なら年の4月1
27
+ // 入学の4月1日が未来日なら1
26
28
  first = first.minusYears(1);
27
29
  }
28
- // 年の差分を加算 (intのmaxを超えるケースは無視)
30
+ // 開始する数(1)+(入学度-当日年) intのmaxを超えるケースは無視
29
- grade += ChronoUnit.YEARS.between(input, first);
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

変数名に違和感があったのでコードとコメントを一部修正

2015/11/16 03:26

投稿

argius
argius

スコア9396

answer CHANGED
@@ -17,8 +17,8 @@
17
17
  return 0;
18
18
  }
19
19
 
20
- // 基礎
20
+ // 計算に初期値:1を設定
21
- int base = 1;
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
- base += ChronoUnit.YEARS.between(input, first);
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
- ++base;
33
+ ++grade;
34
34
  }
35
- return base;
35
+ return grade;
36
36
  }
37
37
  ```