首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Java 基礎實戰:手寫萬年曆打印程式

     編輯:Java 綜合教學

Java 基礎實戰:手寫萬年曆打印程式

問題描述

輸入年份與月份,控制台打印該月份的日曆表,格式如:

      2017年 1月
日 一 二 三 四 五 六
 1  2  3  4  5  6  7
 8  9 10 11 12 13 14
...

核心邏輯拆解

  1. 基準日:1970-01-01 是星期四(Unix 元年)。
  2. 計算目標月 1 日是星期幾:
    • 累加 1970 年至目標年份前一年的總天數(閏年 366,平年 365)。
    • 累加目標年 1 月至目標月前一月的總天數(需判斷閏年決定 2 月天數)。
    • 總天數 % 7 配合基準日得出星期幾(0~6 對應周日~周六)。
  3. 獲取目標月總天數:switch 判斷月份,2 月結合閏年規則。
  4. 格式化輸出:先打印表頭,再按星期偏移打印空格,最後逐日換行。

代碼結構設計

  • isLeapYear(year):判斷閏年獨立方法。
  • getTotalDays(year, month):計算距 1970-01-01 總天數。
  • getMonthDays(year, month):返回當月天數。
  • printTitle(year, month):打印年月表頭。
  • printBody(firstWeekDay, monthDays):打印日期主體。
  • main():接收輸入,串聯調用。

關鍵代碼片段

// 判斷閏年
public static boolean isLeapYear(int year) {
    return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
}

// 計算 1 日星期幾(0=周日)
public static int getFirstWeekDay(int year, int month) {
    int totalDays = 0;
    for (int y = 1970; y < year; y++) totalDays += isLeapYear(y) ? 366 : 365;
    for (int m = 1; m < month; m++) totalDays += getMonthDays(year, m);
    return (totalDays + 4) % 7; // 1970-01-01 是周四(4)
}

總結與心得

「自頂向下分析,自底向上實現」:將大問題拆解為閏年判斷、天數累加、星期計算、格式打印等獨立小模塊,逐個擊破,最後組裝。這是處理邏輯類問題的通用思維,亦是良好編程習慣的體現。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved