回答編集履歴

2

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

2015/11/16 03:26

投稿

argius
argius

スコア9390

test CHANGED
@@ -3,6 +3,14 @@
3
3
 
4
4
 
5
5
  もう少しスッキリ書けると思いましたが、そうでも無かったです...
6
+
7
+
8
+
9
+ (追記)
10
+
11
+ swordoneさんのご指摘を元に(というかそのまま)コードを修正してみました。
12
+
13
+ かなりスッキリしましたね。
6
14
 
7
15
 
8
16
 
@@ -36,37 +44,21 @@
36
44
 
37
45
 
38
46
 
39
- // 計算値に期値:1設定
47
+ // 入学年度算出
40
48
 
41
- int grade = 1;
49
+ LocalDate first = LocalDate.of(year, 4, 1);
42
50
 
43
- // 年度初日を算出
51
+ if (first.isAfter(input)) {
44
52
 
45
- LocalDate first = today.withMonth(4).withDayOfMonth(1);
46
-
47
- if (first.isAfter(today)) {
48
-
49
- // 年の4月1日が未来日なら前4月1
53
+ // 入学の4月1日が未来日なら1年前の
50
54
 
51
55
  first = first.minusYears(1);
52
56
 
53
57
  }
54
58
 
55
- // 年の差分を加算 (intのmaxを超えるケースは無視)
59
+ // 開始する数(1)+(入学度-当日年) intのmaxを超えるケースは無視
56
60
 
57
- grade += ChronoUnit.YEARS.between(input, first);
61
+ return 1 + (int)ChronoUnit.YEARS.between(first, today);
58
-
59
- // 年度調整
60
-
61
- if (MonthDay.from(input).isBefore(MonthDay.of(4, 1))) {
62
-
63
- // 入力日付が4月1日より前なら+1
64
-
65
- ++grade;
66
-
67
- }
68
-
69
- return grade;
70
62
 
71
63
  }
72
64
 

1

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

2015/11/16 03:26

投稿

argius
argius

スコア9390

test CHANGED
@@ -36,9 +36,9 @@
36
36
 
37
37
 
38
38
 
39
- // 基礎
39
+ // 計算に初期値:1を設定
40
40
 
41
- int base = 1;
41
+ int grade = 1;
42
42
 
43
43
  // 年度初日を算出
44
44
 
@@ -54,7 +54,7 @@
54
54
 
55
55
  // 年の差分を加算 (intのmaxを超えるケースは無視)
56
56
 
57
- base += ChronoUnit.YEARS.between(input, first);
57
+ grade += ChronoUnit.YEARS.between(input, first);
58
58
 
59
59
  // 年度調整
60
60
 
@@ -62,11 +62,11 @@
62
62
 
63
63
  // 入力日付が4月1日より前なら+1
64
64
 
65
- ++base;
65
+ ++grade;
66
66
 
67
67
  }
68
68
 
69
- return base;
69
+ return grade;
70
70
 
71
71
  }
72
72