JAVA面向對象的方式輸入輸出日曆

JAVA面向對象的方式輸入輸出日曆

 package JAVA_Project_01_03;//創建一個包

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class TextControl {//操作打印任一年日曆的類

    static int year,monthDay,weekDay;//定義靜態變量,以便其他類調用

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

    public static int firstDay(int y){//計算該年第一天是星期幾
        long n=y*365;
        for (int i=1;i<y;i++)
            if (isLeapYear(i))//判斷是否是潤年
                n+=1;
            return (int)n%7;
    }

    public static void printWeek(){//打印表頭
        System.out.println("============");
        System.out.println("日一二三四五六");
    }

    public static int getMonthDay(int m){//獲取每個月的天數
        switch (m){
            case 1:
            case 3:
            case 5:
            case 7:
            case 8:
            case 10:
            case 12:
            return 31;
            case 4:
            case 6:
            case 9:
            case 11:
            return 30;
            case 2:
            if (isLeapYear(year))//判斷是否是潤年
                return 29;
            else
                return 28;
            default:
                return 0;
        }
    }

    public static void printMonth(){//分別按不同條件逐月打印
        for (int m=1;m<=12;m++)//循環月份
        {
            System.out.println(m+"月");
            printWeek();
            for (int j=1;j<=weekDay;j++){//按每個月第一天是星期幾打印相應的空格
                System.out.print("");
            }
            int monthDay=getMonthDay(m);//獲取每個月的天數
            for (int d=1;d<=monthDay;d++){
                if (d<10)//以下4行對輸出格式化
                    System.out.print(d+"");
                else
                    System.out.print(d+"");
                weekDay=(weekDay+1)%7;//每打印一天後,反映第二天是星期幾
                if (weekDay==0)//如果第二天是星期天,便換行
                    System.out.println();
            }
            System.out.println('\n');
        }
    }

    public static void main(String[] args) throws IOException {//java程序的主入口處
        System.out.println("請輸入一個年份:");
        InputStreamReader ir;//以下接收從控制檯的輸入
        BufferedReader in;
        ir=new InputStreamReader(System.in);
        in=new BufferedReader(ir);
        String s=in.readLine();
        year=Integer.parseInt(s);
        weekDay=firstDay(year);//計算該年第一天是星期幾
        System.out.println("\n"+year+"年");
        printMonth();
    }
}

/*
(1)isLeapYear()方法根據傳入的年份被4整除但不能被100 整除 或400 整除來判斷是否是潤年
(2)firstDay()方法判斷傳入的年份是否是潤年,如果潤年則天數要加1,再取得除7的餘數,餘數即爲星期幾的表示。
(3)getMonthDay()方法根據大月小月以及2月份的月份天數不同,運用switch-case分路分支的流程判斷。
注意:switch中的字符是int,short,byte,char,不能long,String.如果case的值爲空,沒有break語句,
則循環一直往下尋找直到遇到return;在沒有符合匹配的字符串時,則i進入default語句。
(4)在程序main()方法中,運用控制檯輸入數值,具有很好的靈活性的可操作性。將所輸入的文本從流中InputStream(字節流)
傳給inputStreamReader(字符流)再放到BufferSteam(緩衝流)。這樣有助於讀完數據釋放已分配的內存。
 */
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章