うるう年判定アプリを作成しながらメソッドの練習をしていこう。言語はJavaだ。
お題
西暦と月を入力するとその月の日数を教えてくれるアプリを作成する。
入力は西暦と月がカンマ区切りで入力されるものとする。
なお、処理はすべて正常系だけを考慮すればよい。(不正な入力はないものとする)
実行例
西暦と月を入力>>2022,4 [enter]
2022年4月は30日まであります
メソッド作成
上記の処理を実現するにあたり、以下の3つのメソッドを作成する
1.csv文字列を受け取り、int型配列を返却する(例 "2022,4" -> {2022,4})
public static int[] csvToIntArr(String csv){}
2.西暦を受け取りそれが閏年なのかを判定する
閏年の判定は以下
1. 400で割り切れたら閏年
2. 4で割り切れて100で割り切れなかったら閏年
public static boolean isLeapYear(int year){}
3.西暦と月を受け取り日数を返す(メソッドの内部で2で作成したisLeapYearを利用する)
public static int daysOfMonth(int year,int month){}
上記のメソッドを使いメインメソッドを実行例のようになるように作成する。
解答例
import java.util.*;
public class LeapYearApp{
public static void main(String[] args){
System.out.print("西暦と月を入力>>");
String csv=new Scanner(System.in).nextLine();
int[] dataArr=csvToIntArr(csv);
int days=daysOfMonth(dataArr[0],dataArr[1]);
System.out.printf("%d年%d月は%d日まであります%n",dataArr[0],dataArr[1],days);
}
public static int[] csvToIntArr(String csv){
String[] data=csv.split(",");
int[] retArr = new int[data.length];
for(int i=0;i<retArr.length;i++){
retArr[i]=Integer.parseInt(data[i]);
}
return retArr;
}
public static boolean isLeapYear(int year){
return year % 400 == 0 || (year % 4 == 0 && year % 100 != 0);
}
public static int daysOfMonth(int year,int month){
int[] days={31,28,31,30,31,30,31,31,30,31,30,31};
if(isLeapYear(year)){
days[1]++;
}
return days[month-1];
}
}
コメント