fork(1) download
  1. import java.util.*;
  2. import static java.lang.System.*;
  3. import java.time.LocalDateTime;
  4. import java.time.format.DateTimeFormatter;
  5.  
  6. class Koyomi2 {
  7. // 月の最終日を配列に格納しておきます
  8. static int[] maxDays = { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
  9.  
  10. // 範囲をもって数字を入力するメソッドです
  11. static int inputNumber(Scanner scan, String message, int min, int max) {
  12. int number;
  13. String str;
  14. // メッセージを出します
  15. out.print(message);
  16. while(true) {
  17. // 1行入力します
  18. str = scan.nextLine();
  19. try {
  20. // 整数に変換します
  21. number = Integer.parseInt(str);
  22. // 範囲の中か確認し、範囲外なら例外にします
  23. if (number < min || number > max) {
  24. throw new java.lang.NumberFormatException();
  25. }
  26. } catch (java.lang.NumberFormatException e) {
  27. // 整数に変換できないか、範囲外の時にここに来ます
  28. out.println("正しい入力ではありません。");
  29. // 入力し直しです
  30. continue;
  31. }
  32. // ここに来たときはnumberに範囲の中の数字が入力されています
  33. break;
  34. }
  35. // 入力された数字を整数で返します
  36. return number;
  37. }
  38.  
  39. // メインです
  40. public static void main(String[] args) {
  41. Scanner scan = new Scanner(in);
  42.  
  43. // 今日の日付を表示します
  44. out.println(LocalDateTime.now().format(DateTimeFormatter.ofPattern("今日はyyyy年MM月dd日です。")));
  45.  
  46. // 年と月を入力してもらって閏年の判断をします
  47. boolean isUruu = false;
  48. int year;
  49. int month;
  50. year = inputNumber(scan, "何年のカレンダーを見ますか?2000~2040までの数字を入力して下さい。>", 2000, 2040);
  51. if (year % 400 == 0) {
  52. isUruu = true;
  53. } else if (year % 100 == 0) {
  54. isUruu = false;
  55. } else if (year % 4 == 0) {
  56. isUruu = true;
  57. } else {
  58. isUruu = false;
  59. }
  60.  
  61. month = inputNumber(scan, "何月のカレンダーを見ますか?1~12までの数字を入力して下さい。>", 1, 12);
  62.  
  63. // カレンダーの表示を始めます
  64. out.println(" " + year + "年 " + month + "月");
  65. out.println("日 月 火 水 木 金 土");
  66.  
  67. // 入力してもらった年月の1日目の曜日の判定を行います
  68. // 1が日曜で7が土曜です
  69. Calendar cal2 = Calendar.getInstance();
  70. cal2.set(Calendar.YEAR, year);
  71. cal2.set(Calendar.MONTH, month - 1);
  72. cal2.set(Calendar.DAY_OF_MONTH, 1);
  73. int youbi = cal2.get(Calendar.DAY_OF_WEEK);
  74.  
  75. // カレンダーは日曜始まりなので、youbiが1から1つ離れるたびに空白を3文字(曜日の漢字が空白2文字分に空白)ずらしていきます
  76. for (int space = 1; space < youbi; space ++)
  77. out.print(" ");
  78.  
  79. // その月の最終日を判断します
  80. // 2月だけは閏年があるので特別に判定します
  81. int lastDay = (month == 2 && isUruu) ? 29 : maxDays[month-1];
  82.  
  83. // 1日から最終日までループします
  84. for (int day = 1; day <= lastDay; day ++) {
  85. out.print(String.format("%2d ", day));
  86. // 土曜の時、改行して日曜にします
  87. // そうでないときは曜日を次の曜日になるようにします
  88. if (youbi++ == 7) {
  89. out.println("");
  90. youbi = 1;
  91. }
  92. }
  93. // 最後に改行します
  94. out.println("");
  95. }
  96. }
  97.  
Success #stdin #stdout 0.26s 36388KB
stdin
0
-1
a
null
2016
2

stdout
今日は2018年05月26日です。
何年のカレンダーを見ますか?2000~2040までの数字を入力して下さい。>正しい入力ではありません。
正しい入力ではありません。
正しい入力ではありません。
正しい入力ではありません。
何月のカレンダーを見ますか?1~12までの数字を入力して下さい。>     2016年 2月
日 月 火 水 木 金 土
    1  2  3  4  5  6 
 7  8  9 10 11 12 13 
14 15 16 17 18 19 20 
21 22 23 24 25 26 27 
28 29