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(缓冲流)。这样有助于读完数据释放已分配的内存。
 */
发布了70 篇原创文章 · 获赞 10 · 访问量 3209

猜你喜欢

转载自blog.csdn.net/JN_Cat/article/details/102508094
今日推荐