# 厄年計算課題
###### tags: `Java` `Practice`
1. Solution 1: 最差解
```
package test;
import java.util.*;
public class Test {
//Definition
public static final int sexMale = 1;
public static final int sexFemale = 2;
public static void go() {
//initialization
String inputYear = null;
String inputSex = null;
int birthYear = 0;
int thisYear = 0;
int age = 0;
int sex = 0;
//Display input information and request user's input of birth year
Scanner input = new Scanner(System.in);
System.out.println("貴方の生年(西暦4桁)を入力してください:");
//casting, get current year, calculate age
inputYear = input.nextLine();
birthYear = Integer.parseInt(inputYear);
thisYear = 2022;
age = thisYear - birthYear + 1;
//Display age information and request user's input of sexuality
System.out.println("貴方の年齢(数え年の年齢)は" + age + "歳です。");
System.out.println("");
System.out.println("貴方の性別を教えてください。(男性の場合1を、女性の場合2を入力してください。)");
inputSex = input.nextLine();
//casting, close input
sex = Integer.parseInt(inputSex);
input.close();
//Determination
if (sex == sexMale) {
switch (age) {
case 25: case 42: case 61:
System.out.println("今年は貴方の本厄です。");
break;
case 24: case 41: case 60:
System.out.println("今年は貴方の前厄です。");
break;
default:
System.out.println("今年は貴方の厄年ではありません。");
break;
}
}
else if (sex == sexFemale) {
switch (age) {
case 19: case 33: case 37: case 61:
System.out.println("今年は貴方の本厄です。");
break;
case 18: case 32: case 36: case 60:
System.out.println("今年は貴方の前厄です。");
break;
default:
System.out.println("今年は貴方の厄年ではありません。");
break;
}
}
}
}
```
2. Solution 2: 次優解
```
package test;
import java.time.LocalDate;
import java.util.*;
public class Test {
//Definition
public static int[] femaleHonnyakuAges = new int[] {19,33,37,61};
public static int[] maleHonnyakuAges = new int[] {25,42,61};
public static final int sexMale = 1;
public static final int sexFemale = 2;
public static void go() {
//initialization
String inputYear = null;
String inputSex = null;
int birthYear = 0;
int thisYear = 0;
int age = 0;
int sex = 0;
//Display input information and request user's input of birth year
Scanner input = new Scanner(System.in);
System.out.println("【厄年計算】");
System.out.println("貴方の生年(西暦4桁)を入力してください:");
inputYear = input.nextLine();
//casting, get current year, calculate age
birthYear = Integer.parseInt(inputYear);
thisYear = LocalDate.now().getYear();
age = thisYear - birthYear + 1;
//Display age information and request user's input of sexuality
System.out.println("貴方の年齢(数え年の年齢)は" + age + "歳です。");
System.out.println("");
System.out.println("貴方の性別を教えてください。(男性の場合1を、女性の場合2を入力してください。)");
inputSex = input.nextLine();
//casting, close input
sex = Integer.parseInt(inputSex);
input.close();
//Determination
if (isHonnyaku(sex, age)) {
System.out.println("今年は貴方の本厄です。");
}
else if (isMaeyaku(sex, age)) {
System.out.println("今年は貴方の前厄です。");
}
else {
System.out.println("今年は貴方の厄年ではありません。");
}
}
public static boolean isHonnyaku(int sex, int age){
boolean result = false;
if (sex == sexMale) {
for (int maleHonnyaku : maleHonnyakuAges) {
if (maleHonnyaku == age) {
result = true;
}
}
}
else if (sex == sexFemale) {
for (int femaleHonnyaku : femaleHonnyakuAges) {
if (femaleHonnyaku == age) {
result = true;
}
}
}
else {
}
return result;
}
public static boolean isMaeyaku(int sex, int age) {
boolean result = false;
if (sex == sexMale) {
for (int maleMaeyaku : maleHonnyakuAges) {
if (maleMaeyaku == age + 1) {
result = true;
}
}
}
else if (sex == sexFemale) {
for (int femaleMaeyaku : femaleHonnyakuAges) {
if (femaleMaeyaku == age + 1) {
result = true;
}
}
}
else {
}
return result;
}
}
```
3. Solution 3: 最優解 將邏輯統整成methods
```
package test;
import java.time.LocalDate;
import java.util.*;
public class Test {
//Definition
public static final int[] FEMALEHONNYAKUAGES = new int[] {19,33,37,61};
public static final int[] MALEHONNYAKUAGES = new int[] {25,42,61};
public static final int SEXMALE = 1;
public static final int SEXFEMALE = 2;
public static void go() {
//initialization
String inputYear = null;
String inputSex = null;
int birthYear = 0;
int thisYear = 0;
int age = 0;
int sex = 0;
//Display input information and request user's input of birth year
Scanner input = new Scanner(System.in);
System.out.println("貴方の生年(西暦4桁)を入力してください:");
inputYear = input.nextLine();
//casting, get current year, calculate age
birthYear = Integer.parseInt(inputYear);
thisYear = LocalDate.now().getYear();
age = thisYear - birthYear + 1;
//Display age information and request user's input of sexuality
System.out.println("貴方の年齢(数え年の年齢)は" + age + "歳です。");
System.out.println("");
System.out.println("貴方の性別を教えてください。(男性の場合1を、女性の場合2を入力してください。)");
inputSex = input.nextLine();
//casting, close input
sex = Integer.parseInt(inputSex);
input.close();
//Determination
if (isHonnyaku(sex, age)) {
System.out.println("今年は貴方の本厄です。");
}
else if (isHonnyaku(sex, age + 1)) {
System.out.println("今年は貴方の前厄です。");
}
else if (isHonnyaku(sex, age - 1)) {
System.out.println("今年は貴方の後厄です。");
}
else {
System.out.println("今年は貴方の厄年ではありません。");
}
}
public static boolean isHonnyaku(int sex, int age){
int[] array = null;
if (sex == SEXMALE) {
array = MALEHONNYAKUAGES;
return hasValue(age, array);
}
else if (sex == SEXFEMALE) {
array = FEMALEHONNYAKUAGES;
return hasValue(age, array);
}
return false;
}
static boolean hasValue(int age, int[] array) {
for (int x : MALEHONNYAKUAGES) {
if(x == age) {
return true;
}
}
for (int y : FEMALEHONNYAKUAGES) {
if(y == age) {
return true;
}
}
return false;
}
}
```