###前提・実現したいこと
現状、縦一列に表示されいる一年分のカレンダー表を、横に三ヶ月分ずつの縦四段表示にしたい。
実現のためのアプローチ方、ヒント等を求めます。
よろしくお願いします。
###発生している問題・エラーメッセージ
アプローチの方法がわからず、手詰まりです。
###該当のソースコード
Java
1import java.util.Calendar; 2 3class Main { 4 public static void main(String[] args) { 5 // 現在の西暦、日時取得 6 Calendar rightNow = Calendar.getInstance(); // 実行時の西暦、日付等を持つインスタンス 7 int year = rightNow.get(Calendar.YEAR);// 西暦を取得 8 int month = 0; 9 //int days = rightNow.getActualMaximum(Calendar.DATE);// 月の日数を取得 10 int days[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; //各月の日数 11 12 // 一年分表示 13 for (int i = month; i < 12; i++) { 14 int firstDate = checkFirstDate(year, month); 15 createCalendar(days[month], year, month, firstDate); 16 month++; 17 } 18 } 19 20 21 public static void createCalendar(int days, int year, int month,int firstDate) { 22 // カレンダー作成処理開始 23 int count = 1;// 曜日判定カウント 1=sun 2 = mon 24 String[] space = { " ", " ", " " };// 整形用スペース配列 25 26 // 年月表示 27 System.out.println("\t" + year + "年" + space[2] + (month + 1) + "月\n"); 28 29 // 曜日表示処理 30 String[] weekly = { "日", "月", "火", "水", "木", "金", "土" }; 31 for (String elm : weekly) { 32 System.out.print(space[2] + elm); 33 } 34 System.out.println(""); 35 36 // 日にち表示処理 37 for (int i = 1; i <= days;) { 38 // 1日の曜日と一致しなかった場合 39 if (i == 1 && (count < firstDate)) { 40 // スペース3個を出力する 41 System.out.print(space[0]); 42 count++; 43 // 日付のサイズが1だった場合 44 } else if (String.valueOf(i).length() == 1) { 45 // スペース2個と日付を出力します 46 System.out.print(space[1] + String.valueOf(i)); 47 i++; 48 count++; 49 // 日付のサイズが2だった場合 50 } else if (String.valueOf(i).length() == 2) { 51 // スペース1個と日付を出力します 52 System.out.print(space[2] + String.valueOf(i)); 53 i++; 54 count++; 55 } 56 // 土曜日を超えた場合改行します 57 if (i != 1 && count > 7) { 58 System.out.println(""); 59 count = 1; 60 } 61 62 } 63 // 残りの枠を空白で埋める 64 if (count < 8) { 65 for (int i = count; i < 8; i++) { 66 System.out.print(space[0]); 67 } 68 System.out.println(""); 69 70 } 71 72 } 73 74 public static int checkFirstDate(int year, int month) { 75 Calendar firstDay = Calendar.getInstance(); 76 firstDay.set(Calendar.DATE, 1);// DATEフィールドの値を一日へ変更 77 firstDay.set(Calendar.MONTH, month); 78 int firstDate = firstDay.get(Calendar.DAY_OF_WEEK);// 一日の曜日の取得 1 = sun 79 return firstDate; 80 } 81} 82
###補足情報(言語/FW/ツール等のバージョンなど)
Java 8 実行環境はwindowsコマンドプロンプト
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/07/30 13:04
2017/07/31 01:46
2017/08/04 09:20