java实验:输出任意一年的日历,普通方法和调用Calendar类方法

一. 题目

输出2008年的日历,统计2008年日期个位数和星期恰好相同的天数;

二,结果展示

在这里插入图片描述

三,代码

1.常规方法


以下一个类一个文件

package calendar;

public class J_Year{
	int year;
	int allday;
	int [] d= {0,31,0,31,30,31,30,31,31,30,31,30,31};
	public J_Year() {}
	
	public J_Year(int year) {
		this.year=year;
		if(Isleapyear()) {
			d[2]=29;
		    allday=366;
		}
		else {
			d[2]=28;
		    allday=365;
		}
	}
	public boolean Isleapyear() {
		return (year%4==0&&year%100!=0||year%400==0);
	}
	
	public int getday(int month,int day) {
		int y=year%100;
		int D=day;
		for(int i=1;i<month;i++)
			D+=d[i];
	    return ((y-1)+((y-1)/4)-((y-1)/100)+((y-1)/400)+D)%7;//公式
	}
}

///
///主类
///
package calendar;

public class J_Calendar {
	public static void main(String args[]) {
		J_Year a = new J_Year(2008);
		int w;
        int count=0;
		for (int month = 1; month <= 12; month++) {
			w = a.getday(month, 1);
			System.out.print("\n\n                    第"+month+"月\n\n");
			System.out.println("  日  一  二  三  四  五  六");
			for (int j = 0; j < w; j++)
				System.out.print("    ");
			for (int day = 1; day <= a.d[month]; day++) {
				System.out.printf("%4d", day);
				w++;
				if (w % 7 == 0)
					System.out.println();
				if((day%10)==a.getday(month, day)||(day%10)==7&&a.getday(month, day)==0)
					count++;
				
			}
			
		}
		System.out.println("\n\n日期个位数和星期数相同的天数有"+count+"天");
		
	}
}

2.调用Calendar方法

package 测试;

import java.util.Calendar;

public class LittleCode_3 {

    public static void printCalender(int Year,int Month) {
        int year = Year;
        int month = Month;
        //input
        Calendar calendar = Calendar.getInstance();
        calendar.set(year, month - 1, 1);
        int startDay = calendar.get(Calendar.DAY_OF_WEEK); //求本周第一天是星期几
        int count = startDay - 1; //第一周的初始计数
        int maxDay = maxDayInMonth(year, month);
        System.out.println("Sun Mon Tue Wed Thu Fri Sat");
        fillSpace(startDay);
        for (int i = 1; i <= maxDay; i++) {
            System.out.printf("%3d%s", i, " "); //使用printf函数进行格式对齐
            count++;
            if (count >= 7) { //每输出7天换一次行
                count = 0;
                System.out.print('\n');
            }
        }
    }

    public static void fillSpace(int startDay) {
        for (int i = 1; i < startDay; i++) {
            System.out.printf("%4s", " ");
        }
    }

    public static int maxDayInMonth(int year, int month) {
        int max = 30;
        if (month == 1 | month == 3 | month == 5 | month == 7 | month == 8 | month == 10 | month == 12) max = 31;
        else if (month == 2) max = 28;
        else if (month == 2 & (year % 4 == 0) && (year % 100 != 0) || (year % 400 == 0)) max = 29;
        return max;
    }

    public static void main(String[] args) {
        for(int i=1;i<=12;i++) {
        	System.out.print("\n第"+i+"月\n");
    	printCalender(2019,i);
        }
    	System.out.println();
    
 }
}


  • 7
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值