import java.util.*;
import static java.
lang.
System.
*; import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
class Koyomi2 {
// 月の最終日を配列に格納しておきます
static int[] maxDays = { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
// 範囲をもって数字を入力するメソッドです
static int inputNumber
(Scanner scan,
String message,
int min,
int max
) { int number;
// メッセージを出します
out.print(message);
while(true) {
// 1行入力します
str = scan.nextLine();
try {
// 整数に変換します
// 範囲の中か確認し、範囲外なら例外にします
if (number < min || number > max) {
}
// 整数に変換できないか、範囲外の時にここに来ます
out.println("正しい入力ではありません。");
// 入力し直しです
continue;
}
// ここに来たときはnumberに範囲の中の数字が入力されています
break;
}
// 入力された数字を整数で返します
return number;
}
// メインです
public static void main
(String[] args
) { Scanner scan = new Scanner(in);
// 今日の日付を表示します
out.println(LocalDateTime.now().format(DateTimeFormatter.ofPattern("今日はyyyy年MM月dd日です。")));
// 年と月を入力してもらって閏年の判断をします
boolean isUruu = false;
int year;
int month;
year = inputNumber(scan, "何年のカレンダーを見ますか?2000~2040までの数字を入力して下さい。>", 2000, 2040);
if (year % 400 == 0) {
isUruu = true;
} else if (year % 100 == 0) {
isUruu = false;
} else if (year % 4 == 0) {
isUruu = true;
} else {
isUruu = false;
}
month = inputNumber(scan, "何月のカレンダーを見ますか?1~12までの数字を入力して下さい。>", 1, 12);
// カレンダーの表示を始めます
out.println(" " + year + "年 " + month + "月");
out.println("日 月 火 水 木 金 土");
// 入力してもらった年月の1日目の曜日の判定を行います
// 1が日曜で7が土曜です
int youbi
= cal2.
get(Calendar.
DAY_OF_WEEK);
// カレンダーは日曜始まりなので、youbiが1から1つ離れるたびに空白を3文字(曜日の漢字が空白2文字分に空白)ずらしていきます
for (int space = 1; space < youbi; space ++)
out.print(" ");
// その月の最終日を判断します
// 2月だけは閏年があるので特別に判定します
int lastDay = (month == 2 && isUruu) ? 29 : maxDays[month-1];
// 1日から最終日までループします
for (int day = 1; day <= lastDay; day ++) {
out.
print(String.
format("%2d ", day
)); // 土曜の時、改行して日曜にします
// そうでないときは曜日を次の曜日になるようにします
if (youbi++ == 7) {
out.println("");
youbi = 1;
}
}
// 最後に改行します
out.println("");
}
}
aW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgc3RhdGljIGphdmEubGFuZy5TeXN0ZW0uKjsKaW1wb3J0IGphdmEudGltZS5Mb2NhbERhdGVUaW1lOwppbXBvcnQgamF2YS50aW1lLmZvcm1hdC5EYXRlVGltZUZvcm1hdHRlcjsKCmNsYXNzIEtveW9taTIgewoJLy8g5pyI44Gu5pyA57WC5pel44KS6YWN5YiX44Gr5qC857SN44GX44Gm44GK44GN44G+44GZCglzdGF0aWMgaW50W10gbWF4RGF5cyA9IHsgMzEsIDI5LCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMxLCAzMCwgMzEsIDMwLCAzMSB9OwoKCS8vIOevhOWbsuOCkuOCguOBo+OBpuaVsOWtl+OCkuWFpeWKm+OBmeOCi+ODoeOCveODg+ODieOBp+OBmQoJc3RhdGljIGludCBpbnB1dE51bWJlcihTY2FubmVyIHNjYW4sIFN0cmluZyBtZXNzYWdlLCBpbnQgbWluLCBpbnQgbWF4KSB7CgkJaW50IG51bWJlcjsKCQlTdHJpbmcgc3RyOwoJCS8vIOODoeODg+OCu+ODvOOCuOOCkuWHuuOBl+OBvuOBmQogCQlvdXQucHJpbnQobWVzc2FnZSk7CgkJd2hpbGUodHJ1ZSkgewoJCQkvLyAx6KGM5YWl5Yqb44GX44G+44GZCiAgICAJCQlzdHIgPSBzY2FuLm5leHRMaW5lKCk7CiAgICAJCQl0cnkgewogICAgCQkJCS8vIOaVtOaVsOOBq+WkieaPm+OBl+OBvuOBmQoJCQkJbnVtYmVyID0gSW50ZWdlci5wYXJzZUludChzdHIpOwoJCQkJLy8g56+E5Zuy44Gu5Lit44GL56K66KqN44GX44CB56+E5Zuy5aSW44Gq44KJ5L6L5aSW44Gr44GX44G+44GZCgkJCQlpZiAobnVtYmVyIDwgbWluIHx8IG51bWJlciA+IG1heCkgewoJCQkJCXRocm93IG5ldyBqYXZhLmxhbmcuTnVtYmVyRm9ybWF0RXhjZXB0aW9uKCk7CgkJCQl9CgkJICAgIAl9IGNhdGNoIChqYXZhLmxhbmcuTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpIHsKCQkgICAgCQkvLyDmlbTmlbDjgavlpInmj5vjgafjgY3jgarjgYTjgYvjgIHnr4Tlm7LlpJbjga7mmYLjgavjgZPjgZPjgavmnaXjgb7jgZkKCSAgICAJCQlvdXQucHJpbnRsbigi5q2j44GX44GE5YWl5Yqb44Gn44Gv44GC44KK44G+44Gb44KT44CCIik7CgkgICAgCQkJLy8g5YWl5Yqb44GX55u044GX44Gn44GZCiAgICAJCQkJY29udGludWU7CiAgICAJCQl9CiAgICAJCQkvLyDjgZPjgZPjgavmnaXjgZ/jgajjgY3jga9udW1iZXLjgavnr4Tlm7Ljga7kuK3jga7mlbDlrZfjgYzlhaXlipvjgZXjgozjgabjgYTjgb7jgZkKICAgIAkJCWJyZWFrOwoJCX0KCQkvLyDlhaXlipvjgZXjgozjgZ/mlbDlrZfjgpLmlbTmlbDjgafov5TjgZfjgb7jgZkKCQlyZXR1cm4gbnVtYmVyOwoJfQoKCS8vIOODoeOCpOODs+OBp+OBmQoJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewoJCVNjYW5uZXIgc2NhbiA9IG5ldyBTY2FubmVyKGluKTsKCgkJLy8g5LuK5pel44Gu5pel5LuY44KS6KGo56S644GX44G+44GZCgkJb3V0LnByaW50bG4oTG9jYWxEYXRlVGltZS5ub3coKS5mb3JtYXQoRGF0ZVRpbWVGb3JtYXR0ZXIub2ZQYXR0ZXJuKCLku4rml6Xjga95eXl55bm0TU3mnIhkZOaXpeOBp+OBmeOAgiIpKSk7CgoJCS8vIOW5tOOBqOaciOOCkuWFpeWKm+OBl+OBpuOCguOCieOBo+OBpumWj+W5tOOBruWIpOaWreOCkuOBl+OBvuOBmQoJCWJvb2xlYW4gaXNVcnV1ID0gZmFsc2U7CgkJaW50IHllYXI7CgkJaW50IG1vbnRoOwoJCXllYXIgPSBpbnB1dE51bWJlcihzY2FuLCAi5L2V5bm044Gu44Kr44Os44Oz44OA44O844KS6KaL44G+44GZ44GL77yfMjAwMO+9njIwNDDjgb7jgafjga7mlbDlrZfjgpLlhaXlipvjgZfjgabkuIvjgZXjgYTjgII+IiwgMjAwMCwgMjA0MCk7CgkJaWYgKHllYXIgJSA0MDAgPT0gMCkgewoJCQlpc1VydXUgPSB0cnVlOwoJCX0gZWxzZSBpZiAoeWVhciAlIDEwMCA9PSAwKSB7CgkJCWlzVXJ1dSA9IGZhbHNlOwoJCX0gZWxzZSBpZiAoeWVhciAlIDQgPT0gMCkgewoJCQlpc1VydXUgPSB0cnVlOwoJCX0gZWxzZSB7CgkJCWlzVXJ1dSA9IGZhbHNlOwoJCX0KCgkJbW9udGggPSBpbnB1dE51bWJlcihzY2FuLCAi5L2V5pyI44Gu44Kr44Os44Oz44OA44O844KS6KaL44G+44GZ44GL77yfMe+9njEy44G+44Gn44Gu5pWw5a2X44KS5YWl5Yqb44GX44Gm5LiL44GV44GE44CCPiIsIDEsIDEyKTsKCgkJLy8g44Kr44Os44Oz44OA44O844Gu6KGo56S644KS5aeL44KB44G+44GZCgkJb3V0LnByaW50bG4oIiAgICAgIiArIHllYXIgKyAi5bm0ICIgKyBtb250aCArICLmnIgiKTsKCQlvdXQucHJpbnRsbigi5pelIOaciCDngasg5rC0IOacqCDph5Eg5ZyfIik7CgoJCS8vIOWFpeWKm+OBl+OBpuOCguOCieOBo+OBn+W5tOaciOOBrjHml6Xnm67jga7mm5zml6Xjga7liKTlrprjgpLooYzjgYTjgb7jgZkKCQkvLyAx44GM5pel5puc44GnN+OBjOWcn+abnOOBp+OBmQoJCUNhbGVuZGFyIGNhbDIgPSBDYWxlbmRhci5nZXRJbnN0YW5jZSgpOwoJCWNhbDIuc2V0KENhbGVuZGFyLllFQVIsIHllYXIpOwoJCWNhbDIuc2V0KENhbGVuZGFyLk1PTlRILCBtb250aCAtIDEpOwoJCWNhbDIuc2V0KENhbGVuZGFyLkRBWV9PRl9NT05USCwgMSk7CgkJaW50IHlvdWJpID0gY2FsMi5nZXQoQ2FsZW5kYXIuREFZX09GX1dFRUspOwoKCQkvLyDjgqvjg6zjg7Pjg4Djg7zjga/ml6Xmm5zlp4vjgb7jgorjgarjga7jgafjgIF5b3ViaeOBjDHjgYvjgokx44Gk6Zui44KM44KL44Gf44Gz44Gr56m655m944KSM+aWh+Wtlyjmm5zml6Xjga7mvKLlrZfjgYznqbrnmb0y5paH5a2X5YiG44Gr56m655m9KeOBmuOCieOBl+OBpuOBhOOBjeOBvuOBmQoJCWZvciAoaW50IHNwYWNlID0gMTsgc3BhY2UgPCB5b3ViaTsgc3BhY2UgKyspCgkJCW91dC5wcmludCgiICAgIik7CgoJCS8vIOOBneOBruaciOOBruacgOe1guaXpeOCkuWIpOaWreOBl+OBvuOBmQoJCS8vIDLmnIjjgaDjgZHjga/plo/lubTjgYzjgYLjgovjga7jgafnibnliKXjgavliKTlrprjgZfjgb7jgZkKCQlpbnQgbGFzdERheSA9IChtb250aCA9PSAyICYmIGlzVXJ1dSkgPyAyOSA6IG1heERheXNbbW9udGgtMV07CgkJCgkJLy8gMeaXpeOBi+OCieacgOe1guaXpeOBvuOBp+ODq+ODvOODl+OBl+OBvuOBmQoJCWZvciAoaW50IGRheSA9IDE7IGRheSA8PSBsYXN0RGF5OyBkYXkgKyspIHsKCQkJb3V0LnByaW50KFN0cmluZy5mb3JtYXQoIiUyZCAiLCBkYXkpKTsKCQkJLy8g5Zyf5puc44Gu5pmC44CB5pS56KGM44GX44Gm5pel5puc44Gr44GX44G+44GZCgkJCS8vIOOBneOBhuOBp+OBquOBhOOBqOOBjeOBr+abnOaXpeOCkuasoeOBruabnOaXpeOBq+OBquOCi+OCiOOBhuOBq+OBl+OBvuOBmQoJCQlpZiAoeW91YmkrKyA9PSA3KSB7CgkJCQlvdXQucHJpbnRsbigiIik7CgkJCQl5b3ViaSA9IDE7CgkJCX0KCQl9CgkJLy8g5pyA5b6M44Gr5pS56KGM44GX44G+44GZCgkJb3V0LnByaW50bG4oIiIpOwoJfQp9Cg==