二维数组制作日历 和一维数组制作日历

package kgc.copy;

import java.util.Scanner;

public class Java1 {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
//样子 星期几要对上 要随机输入年份 出来对应的日期 
//样子出来了,现在思考得到 我只要知道每个月的第一天是星期几,和这个月的天数,我就能得出准确的日期表
//封装好了,现在问题在第一天和月的天数了吧,第一天是星期几要算出距离1990年1.1多少天吧
        int year1;
        Scanner ss=new Scanner(System.in);
        System.out.println("请输入大于1990的年份!!!");//用户输入年份 要求大于1990年
        year1=ss.nextInt();
        for (int k = 1; k <=12; k++) {
            System.out.println(k+"月份!!!");//每个月
            method2(year1,k);//调方法传入年 遍历的所有月份
        }    
        ss.close();
    }

    public static void method1(int d, int md) {
        String[] mat = new String[] { "一\t", "二\t", "三\t", "四\t", "五\t", "六\t", "日\t" };
        for (int i = 0; i < mat.length; i++) {
            System.out.print(mat[i]);
        }
        for (int i = 0; i < d  + md; i++) {
            if (i % 7 == 0) {//每隔7个换行
                System.out.println("");
            }
            if (i < d ) {//判读空格代替
                System.out.print("\t");
            } else {
                System.out.print(i - (d - 1) + "\t");
            }
        }
        System.out.println("");

    }

    public static void method2(int year,int month) {//method2方法
        int d;//求总天数%7下的星期 也就是空格
        int md;//求出月的天数
        int totalday =0;
        //for循环求出总天数
        for (int i = 1990; i < year; i++) {
            if (i%4==0&&i%100!=0||i%400==0) {//判断闰年
                totalday+=366;//闰年加366天
            }else {
                totalday+=365;//不是闰年加365天
            }
        }
        for (int j = 1; j < month; j++) {//补加当前月的总天数
            switch (j) {
            case 2:
                if (year%4==0&&year%100!=0||year%400==0) {//判断闰年
                    totalday+=29;//闰年加29天
                }else {
                    totalday+=28;//不是闰年加28天
                }
                break;
            case 4:
                totalday+=30;//小月加30天
                break;
            case 6:
                totalday+=30;
                break;
            case 9:
                totalday+=30;
                break;
            case 11:
                totalday+=30;
                break;
            
            default:
                totalday+=31;//大月加31天
                break;
            }//结束for循环  补加当前月的总天数
        }
        
        d=totalday%7;//求总天数%7下的星期 也就是空格
        switch (month) {//判断月的天数
        case 2:
            if (year%4==0&&year%100!=0||year%400==0) {
                md=29;//闰年2月为29天
            }else {
                md=28;//闰年2月为28天
            }
            break;
        case 4:
            md=30;//小月为30天
            break;
        case 6:
            md=30;
            break;
        case 9:
            md=30;
            break;
        case 11:
            md=30;
            break;
        
        default:
            md=31;//大月为31天
            break;
        }
        method1(d,md);//调方法 传入星期和天数
    
    }
}
 

二维写法

package kgc.copy;

import java.util.Scanner;

public class Java2 {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
//样子 星期几要对上 要随机输入年份 出来对应的日期 
//样子出来了,现在思考得到 我只要知道每个月的第一天是星期几,和这个月的天数,我就能得出准确的日期表
//封装好了,现在问题在第一天和月的天数了吧,第一天是星期几要算出距离1990年1.1多少天吧
		int year1;
		Scanner ss=new Scanner(System.in);
		System.out.println("请输入大于1990的年份!!!");//用户输入年份 要求大于1990年
		year1=ss.nextInt();
		for (int k = 1; k <=12; k++) {
			System.out.println(k+"月份!!!");//每个月
			method2(year1,k);//调方法传入年 遍历的所有月份
		}	
		ss.close();
	}
	public static void method1(int gz, int month1) {
	

		String[] arr = new String[] { "一\t", "二\t", "三\t", "四\t", "五\t", "六\t", "日\t" };
		for (int i = 0; i < arr.length; i++) {
			System.out.print(arr[i]);
		}
		System.out.println("");
		for (int j = 0; j < 5; j++) {//二维数组 一共五行

			switch (j) {//判断是第几行
			case 0://第一行
				for (int k = 0; k < 7; k++) {
					if (k % 7 == 0) {//每隔7个换行
						System.out.println("");
					}
					if (k < gz) {
						System.out.print("\t");//输出空格
					} else {
						System.out.print((k + 1) + 7 * j - gz + "\t");
					}

				}
				System.out.println("");
				break;
			case 1://第二行
				for (int k = 0; k < 7; k++) {
					if (k % 7 == 0) {//每隔7个换行
						System.out.println("");
					}
					System.out.print((k + 1) + 7 * j - gz + "\t");
				}
				System.out.println("");
				break;
			case 2://第三行
				for (int k = 0; k < 7; k++) {
					if (k % 7 == 0) {//每隔7个换行
						System.out.println("");
					}
					System.out.print((k + 1) + 7 * j - gz + "\t");
				}
				System.out.println("");
				break;
			case 3://第四行
				for (int k = 0; k < 7; k++) {
					if (k % 7 == 0) {//每隔7个换行
						System.out.println("");
					}
					System.out.print((k + 1) + 7 * j - gz + "\t");
				}
				System.out.println("");
				break;
			case 4://第五行
				switch (month1) {//第五行判断有多少天
				case 31:
					for (int k = 0; k < 3 + gz; k++) { //3==31天
						if (k % 7 == 0) {//每隔7个换行
							System.out.println("");
						}
						System.out.print((k + 1) + 7 * j - gz + "\t");
						
					}
					System.out.println("");
					break;
				case 30:
					for (int k = 0; k < 2 + gz; k++) {//2==30天
						if (k % 7 == 0) {//每隔7个换行
							System.out.println("");
						}
						System.out.print((k + 1) + 7 * j - gz + "\t");
					}
					System.out.println("");
					break;
				case 29:
					for (int k = 0; k < 1 + gz; k++) {//1==29天
						if (k % 7 == 0) {//每隔7个换行
							System.out.println("");
						}
						System.out.print((k + 1) + 7 * j - gz + "\t");
					}
					System.out.println("");
					break;
				case 28:
					for (int k = 0; k < 0 + gz; k++) {//0==28天
						if (k % 7 == 0) {//每隔7个换行
							System.out.println("");
						}
						
						System.out.print((k + 1) + 7 * j - gz + "\t");
					}
					System.out.println("");
					break;
				}

			}

		}

	}

	public static void method2(int year,int month) {//method2方法
		int d;//求总天数%7下的星期 也就是空格
		int md;//求出月的天数
		int totalday =0;
		//for循环求出总天数
		for (int i = 1990; i < year; i++) {
			if (i%4==0&&i%100!=0||i%400==0) {//判断闰年
				totalday+=366;//闰年加366天
			}else {
				totalday+=365;//不是闰年加365天
			}
		}
		for (int j = 1; j < month; j++) {//补加当前月的总天数
			switch (j) {
			case 2:
				if (year%4==0&&year%100!=0||year%400==0) {//判断闰年
					totalday+=29;//闰年加29天
				}else {
					totalday+=28;//不是闰年加28天
				}
				break;
			case 4:
				totalday+=30;//小月加30天
				break;
			case 6:
				totalday+=30;
				break;
			case 9:
				totalday+=30;
				break;
			case 11:
				totalday+=30;
				break;
			
			default:
				totalday+=31;//大月加31天
				break;
			}//结束for循环  补加当前月的总天数
		}
		
		d=totalday%7;//求总天数%7下的星期 也就是空格
		switch (month) {//判断月的天数
		case 2:
			if (year%4==0&&year%100!=0||year%400==0) {
				md=29;//闰年2月为29天
			}else {
				md=28;//闰年2月为28天
			}
			break;
		case 4:
			md=30;//小月为30天
			break;
		case 6:
			md=30;
			break;
		case 9:
			md=30;
			break;
		case 11:
			md=30;
			break;
		
		default:
			md=31;//大月为31天
			break;
		}
		method1(d,md);//调方法 传入星期和一个月天数
	
	}
}

结果如下:

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kjshuan

点个赞就好啦!!!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值