打印任何年月的日历表(Java)

//打印指定月份的日历信息
import java.util.*;
public class PrintfCalender {
	public static void main(String[] args) {
		/*本来想用二维数组做,后经发现实现不了
		 * String [][] calender=new String[6][7]; String[]
		 * firstline={"星期天","星期一","星期二","星期三","星期四","星期五","星期六"}; calender[0]=firstline;
		 * Scanner inScanner=new Scanner(System.in); //
		 * System.out.println(Arrays.toString(calender));这种二维打印出来的都是引用
		 * System.out.println(Arrays.deepToString(calender));
		 */
        
		 Scanner inScanner=new Scanner(System.in);
			System.out.println("输入年:");
			int a=inScanner.nextInt();
			System.out.println("输入月:");
			int b=inScanner.nextInt();
			int PING[]= {31,28,31,30,31,30,31,31,30,31,30,31};
			int RUN[]={31,29,31,30,31,30,31,31,30,31,30,31};
			//sumall为总天数对7取余的值  sum为这个月前的这一年天数  RUNDAY为闰年个数
		    int RUNDAY=0,sum=0,sumall=0;
		    for(int i=1900;i<a;i++) {
		    	if ((i%4==0&&i%100!=0)||(i%400==0))
		         RUNDAY++;	
		    }
		    
		    if (b>=2) {
		    	int only=1;
		    	//闰年时且月份大于1月时
		    	if ((a%4==0&&a%100!=0)||(a%400==0)) {
	    		for (int i = 0; i<b-1; i++) {
					sum+=RUN[i];
				}
	    		sumall=(366*RUNDAY+365*(a-1900-RUNDAY)+sum)%7;
	    		System.out.println("星期一 星期二 星期三 星期四 星期五 星期六 星期天");
	            for (int i = 0; i <sumall; i++) {
	            	System.out.print("     ");
				}
	            for (int i =sumall; i<7; i++) {
	             	System.out.print(String.format("%4d",only++));
	            	System.out.print(" ");
				}
	            System.out.println();
	        	while(only<=RUN[b-1]) {
		            for (int i = 0; i<5; i++) {
						for (int j =0; j<7&&only<=RUN[b-1]; j++) {
						 	System.out.print(String.format("%4d",only++));
						   	System.out.print(" ");
						}
						System.out.println();
					}
		        	}
	            
		    	}
		    	//平年时且月份大于1月时
		    	else {
		    		System.out.println("星期一 星期二 星期三 星期四 星期五 星期六 星期天");
		    		for (int i = 0; i<b-1; i++) {
						sum+=PING[i];
					}
		    		sumall=(366*RUNDAY+365*(a-1900-RUNDAY)+sum)%7;
		    		 for (int i = 0; i <sumall; i++) {
		    			 System.out.print("     ");
						}
			            for (int i =sumall; i<7; i++) {
			            	System.out.print(String.format("%4d",only++));
			            	System.out.print(" ");
						}
			            System.out.println();
			        	while(only<=PING[b-1]) {
			            for (int i = 0; i<5; i++) {
							for (int j =0; j<7&&only<=PING[b-1]; j++) {
							 	System.out.print(String.format("%4d",only++));
							   	System.out.print(" ");
							}
							System.out.println();
						}
			        	}
				}
				
			}
		    //任意年份1月的日历
	    	 else {
	    		 System.out.println("星期一 星期二 星期三 星期四 星期五 星期六 星期天");
	    		 int only=1;
	    		 sumall=(366*RUNDAY+365*(a-1900-RUNDAY))%7;
	    		 for (int i = 0; i <sumall; i++) {
	    			 System.out.print("     ");
					}
		            for (int i =sumall; i<7; i++) {
		             	System.out.print(String.format("%4d",only++));
		            	System.out.print(" ");
					}
		            System.out.println();
		        	while(only<=RUN[b-1]) {
			            for (int i = 0; i<5; i++) {
							for (int j =0; j<7&&only<=31; j++) {
							 	System.out.print(String.format("%4d",only++));
							   	System.out.print(" ");
							}
							System.out.println();
						}
			        	}
			}
		    
		    
		
		
		
		
	}
	

}

输入2000年5月
请添加图片描述

输入2022年3月
请添加图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值