/* package whatever; // don't place package name! */
import java.util.*;
import java.lang.*;
import java.io.*;
class CalendarPrinter
{
private boolean IsUruu(int year)
{
if (year % 400 == 0) {
return true;
}
if (year % 100 == 0) {
return false;
}
if (year % 4 == 0) {
return true;
}
return false;
}
// 引数の年の1月1日の曜日を取得する(日曜なら0)
private int GetYearStartDay(int year)
{
if(year <= 1)
{
return 0;
}
int yearDayCount = 365;
if(IsUruu(year))
{
++yearDayCount;
}
return (GetYearStartDay(year-1) + yearDayCount) % 7;
}
private int GetDayCount(int year, int month)
{
if(month == 2)
{
return IsUruu(year) ? 29 : 28;
}
if(month == 2 ||
month == 4 ||
month == 6 ||
month == 9 ||
month == 11)
{
return 30;
}
if(month == 1 ||
month == 3 ||
month == 5 ||
month == 7 ||
month == 8 ||
month == 10 ||
month == 12)
{
return 31;
}
assert false : "month is invalid (" + month +")";
return 0;
}
// 引数の年月の1日の曜日を取得する(日曜なら0)
private int GetMonthStartDay(int year, int month, int yearStartDay)
{
int dayCountSum = 0;
for(int i=1; i<month; ++i)
{
dayCountSum += GetDayCount(year, i);
}
return (yearStartDay + dayCountSum) % 7;
}
public void Print(int year, int month)
{
int yearStartDay = GetYearStartDay(year);
int monthStartDay = GetMonthStartDay(year, month, yearStartDay);
// 「カレンダーの表示を開始します」みたいな、
// コードを見たらすぐわかるコメントは不要
System.
out.
println(" " + year
+ "年 " + month
+ "月"); System.
out.
println("日 月 火 水 木 金 土");
for (int i = 0; i < monthStartDay; ++i)
{
}
int printingDay = monthStartDay;
int monthDayCount = GetDayCount(year, month);
for (int i = 1; i <= monthDayCount; ++i)
{
++printingDay;
if(printingDay %7 == 0)
{
}
}
}
}
class YearMonthLoader
{
public int year;
public int month;
private boolean isYearInputed;
private boolean isMonthInputed;
private Scanner scanner;
final private int YearMin = 2000;
final private int YearMax = 2040;
YearMonthLoader()
{
scanner
= new Scanner
(System.
in); }
public boolean IsValidYear(int num)
{
return num >= YearMin && num <= YearMax;
}
public boolean IsValidMonth(int num)
{
return num >= 1 && num <= 12;
}
public void Load()
{
isYearInputed = false;
isMonthInputed = false;
while(true)
{
String inputStr
= scanner.
nextLine(); try
{
int input
= Integer.
parseInt(inputStr
); if(!isYearInputed && IsValidYear(input))
{
year = input;
isYearInputed = true;
continue;
}
else if(isYearInputed && IsValidMonth(input))
{
month = input;
isMonthInputed = true;
return;
}
}
{
}
System.
out.
println("正しい入力ではありません。"); }
}
}
{
public static void main
(String[] args
) {
YearMonthLoader loader = new YearMonthLoader();
loader.Load();
CalendarPrinter calendar = new CalendarPrinter();
calendar.Print(loader.year, loader.month);
}
}