方法的使用——打印日曆

輸入年份和月份,顯示該月的整個日曆
package com.im;

import java.util.Scanner;

public class printCalendarl {

public static void main(String[] args) {
    // TODO Auto-generated method stub

    Scanner input = new Scanner(System.in);

    System.out.print("Enter full year (e.g.,2017):");
    int year = input.nextInt();
    System.out.print("Enter month as a number between 1 and 12:");
    int month = input.nextInt();

    printMonth(year, month);

}
public static void printMonth(int year,int month){ //打印月份
    printMonthTitle(year, month);
    printMonthBody(year, month);
}

public static void printMonthTitle(int year,int month){ //打印月份標題
    System.out.println("        "+getMonthName(month)+"  "+year);
    System.out.println(" *****************************");
    System.out.println("  Sun Mon Tue Wed Thu Fri Sat");
}

public static void printMonthBody(int year,int month){ //打印月份主體

    int startDay = getStartDay(year,month);
    int numberOfDaysInMonth = getNumberOfDaysInMonth(year, month);

    int i=0;

    for(i=0; i<startDay; i++){
        System.out.print("    ");
    }
    for(i=1; i<=numberOfDaysInMonth; i++){
        System.out.printf("%4d",i);
        if((i+startDay)%7==0){
            System.out.println();
        }
    }
    System.out.println();
}
public static String getMonthName(int month){ //獲取月份名
    String monthName = ""; //月份英文名
    switch(month){
    case 1:
        monthName = "January 01";
        break;
    case 2:
        monthName = "February 02";
        break;
    case 3:
        monthName = "March 03";
        break;
    case 4:
        monthName = "April 04";
        break;
    case 5:
        monthName = "May 05";
        break;
    case 6:
        monthName = "June 06";
        break;
    case 7:
        monthName = "July 07";
        break;
    case 8:
        monthName = "August 08";
        break;
    case 9:
        monthName = "September 09";
        break;
    case 10:
        monthName = "October 10";
        break;
    case 11:
        monthName = "November 11";
        break;
    case 12:
        monthName = "December 12";
        break;
    }

    return monthName;
}

public static int getStartDay(int year,int month){ //獲取這個月的第一天是星期幾
    final int START_DAY_FOR_JAN_1_1800 = 3; //定義1800年1月1日爲星期三
    int totalNumbersOfDay = getTotalNumberOfDay(year, month);
    return (totalNumbersOfDay+START_DAY_FOR_JAN_1_1800)%7;
}

public static int getTotalNumberOfDay(int year,int month){  //獲取從1800年1月1日至今的總的天數
    int total = 0;
    for(int i=1800; i<year; i++){  //年份累加天數
        if(isLeapYear(i)){
            total += 366;
        }else{
            total += 365;
        }
    }
    for(int i=1; i<month; i++){  //月份累加天數
        total += getNumberOfDaysInMonth(year, i); 
    }
    return total;
}

public static int getNumberOfDaysInMonth(int year,int month){ //獲取這個月總的天數
    if(month==1||month==3||month==5||month==7
            ||month==8||month==10||month==12){
        return 31;
    }
    if(month==4||month==6||month==9||month==11){
        return 30;
    }
    if(month==2){
        if(isLeapYear(year)){
            return 29;
        }else{
            return 28;
        }
    }
    return 0; //如果月份不存在
}

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

}
這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章