Java实现打印本月日历(两种风格:类C风格和Java风格)

一、前言

  最近刚开了java课程,老师布置了一个按标准格式打印本月日历的程序,本题较为简单,下面附上两段代码,一段是用c的思想来写的(上个学期刚学完c),一段是用java里的一些自带类写的。

二、代码

这段是类似c的:

import java.util.Scanner;
public class Data{
        static int[] NormalYear={31,28,31,30,31,30,31,31,30,31,30,31};
        static int[] LeapYear={31,29,31,30,31,30,31,31,30,31,30,31};
    public static void main(String[] arg){
        int days=0,ThisMonth=0,temp=1;
        Scanner data = new Scanner(System.in);
        String[] EnglishMonth = {"Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"};
        System.out.print("please input year:");
        int year = data.nextInt();
        System.out.print("please input month:");
        int month = data.nextInt();
        System.out.println("------------ "+EnglishMonth[month-1]+" "+year+" ------------");
        System.out.println("Sun  Mon  Tues Wed  Thur Fri  Sat");
        days=OffsetValue(year, month);
        days%=7;
        int BlankSpace=days*5;
        while(BlankSpace>0){
            System.out.print(" ");
            BlankSpace--;
        }
        if(JudgeLeapYear(year))
            ThisMonth=LeapYear[month-1];
        else
            ThisMonth=NormalYear[month-1];
        while((ThisMonth--)>0){
            System.out.printf("%-5d",temp++);
            if(days>=6)
            {
                System.out.printf("\n");
                days-=6;
            }
            else
                days++;
        }
        data.close();
    }
    
    public static int OffsetValue(int year,int month){
        final int BaseData=1980;
        int YearTemp=0,day=0;
        boolean ThisYear=false;
        YearTemp=year-BaseData;
        for(int i=0,j=BaseData;i<YearTemp;i++,j++){
            if((j%4==0&&j%100!=0)||j%400==0)
                day+=366;
            else
                day+=365;
        }
        ThisYear=JudgeLeapYear(year);
        for(int j=0;j<month-1;j++){
            if(ThisYear)
                day+=LeapYear[j];
            else
                day+=NormalYear[j];
        }
        return day+2;
    }

    public static boolean JudgeLeapYear(int year){
        if((year%4==0&&year%100!=0)||year%400==0)
            return true;
        else
            return false;
    }
}

这段是用java里自带类写的:

import java.time.*;
import java.util.Scanner;
public class DateJ{
    public static void main(String[] args){
		Scanner num = new Scanner(System.in);
		System.out.print("please enter the year:");
		int year = num.nextInt();
		System.out.print("please enter the month:");
		int month = num.nextInt();
		String[] EnglishMonth = {"Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"};
		System.out.println("------------ "+EnglishMonth[month-1]+" "+year+" ------------");
		LocalDate date = LocalDate.of(year,month,1);
		DayOfWeek weekday = date.getDayOfWeek();
		int value = weekday.getValue();
		System.out.println("Sun  Mon  Tue  Wed  Thu  Fri  Sat");
		for(int i=0;i<value%7;i++)
			System.out.print("     ");
		while(date.getMonthValue() == month){
			System.out.printf("%-4d ",date.getDayOfMonth());
			date = date.plusDays(1);
			if(date.getDayOfWeek().getValue() == 7)
				System.out.println();
		}
		num.close();
		System.out.println();;
	}
}
posted @ 2020-03-17 09:05  comixH  阅读(213)  评论(0编辑  收藏  举报