Java输入年份和第一天的星期,展示全年日历

输入年份和第一天的星期,即可展示全年日历

利用循环每次展示一个月的日历,日历每一行作为一个字符串,长度定为28

根据观察可知,第一天的星期几加7之后除以7取余则可知道该月第一天之前有几天空着,每天字符串长度为4,即可知道当天的字符串。

上个月第一天星期几,加上上个月除以7取余的数字,再除以7则可推断出下个月第一天星期几,以此来判断第一天

为了使日历较为工整,可以对字符串长度进行调整,添加空格补齐字符串

import java.util.List;
import java.util.Scanner;
public class Rili {
    public static void main(String[] args){
        String First,Year,Months,m;
        int a,b,L,d,l,ll,f,D=30,Month=1;
        //定义月份字符串数组
        String[]YueFen = {"January","February","March","April","May","June","July","August","September","October","November","December"};
        //定义大月数组
        int[] Da = {1,3,5,7,8,10,12};
        //定义小月数组
        int[] Xiao = {4,6,9,11};
        Scanner scan = new Scanner (System.in);
        System.out.println("请输入年份");
        Year = scan.nextLine();
        a = Integer.parseInt(Year);
        System.out.println("请输入第一天是周几");
        First= scan.nextLine();
        b = Integer.parseInt(First);
        while (Month<=12){
            f=2;
            Months = YueFen[Month-1];
            L=Months.length();

            //对齐月份字符串长度开始
            while (L<12){
                StringBuffer sc = new StringBuffer();
                sc.append( Months).append(" ");
                Months=sc.toString();
                L= Months.length();
            }
            //对齐月份字符串长度结束

            //添加月份开始分割横线
            for(int i=1;i<=28;i++){
                System.out.print("-");
            }
            System.out.println();
            //添加结束

            //输出某月日历
            System.out.println( Months+"\t"+Year);
            System.out.println("Sun\tMon\tTue\tWed\tThu\tFri\tSat\t");

            for(int i=0;i < Da.length;i++){
                if(Month == Da[i]){
                    f=0;
                    break;
                }

            }
            for(int i=0;i < Xiao.length;i++){
                if(Month == Xiao[i]){
                    f=1;
                    break;
                }

            }
            switch (f){
                case 0:
                    D=31;
                    break;
                case 1:
                    D=30;
                    break;
                case 2:
                    int yn;
                    yn=a%4;
                    if(yn==0){
                        D=29;
                    }
                    else {
                        D=28;
                    }
                    break;
            }

            d = 4*((b+7)%7);
            String str="";
            int day=1;
            while (day<=D){
                if (day==1){
                    for(int ii=1;ii<=d;ii++){
                        StringBuffer sa = new StringBuffer();
                        sa.append(" ").append(str);
                        str=sa.toString();
                    }
                }
                m=Integer.toString(day);
                l=m.length();
               for (int sw=0;sw<4;sw++){
                   if (l<4){
                       String n = m;
                       m=n+" ";
                       l=m.length();
                   }
                }
               String str2=str;
               str=str2+m;
               ll=str.length();
               if (ll == 28||day == D){
                   System.out.println(str);
                   str="";
               }
                day++;
            }
            System.out.println();
            //结束输出日历

            //添加月份结束分割线
            for(int i=1;i<=28;i++){
                System.out.print("-");
            }
            System.out.println();
            System.out.println();
            System.out.println();
            //添加完毕

            //月份增加,进入下一个月
            Month ++;
            int w,y;
            w=D%7;
            y=b;
            b=(y+w)%7;
            }
        }
    }

今夜刚写完的代码,可能不是方便理解,慢慢理解就好,有问题私信或者评论交流

新手代码,不喜勿喷!!!!!!!

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值