LingChan_ 2022-09-23 16:56 采纳率: 100%
浏览 168
已结题

java打印输出2022年任意月份的月历

问题遇到的现象和发生背景

Java程序题目
2022年的元旦是星期六,打印输出2022年任意月份的月历(仿电脑日历的模式,仅公历)。
请教一下各位这个用java怎么写,谢谢!

  • 写回答

2条回答 默认 最新

  • 心寒丶 全栈领域优质创作者 2022-09-23 17:19
    关注
            public static void main(String[] args) {
            /*保存从1900年到当前年的前一年的所有天数
            比如现在是2022年,那么声明的变量就表示1900年到2021年的所有天数
             */
            int alldays = 0;
    
            //保存每个月的天数
            int monthdays = 0;
            //保存余数remainder(每个月份一号前面的空格数,总天数对7求余数)
            int remainder = 0;
            //保存当前年份
            int nowyear = 2022;
            //保存当前月
            System.out.println("请输入打印月份");
            Scanner scanner=new Scanner(System.in);
            
            int nowmonth = scanner.nextInt();
     
     
            //我们来计算从1900年到2021年的所有的天数
            for (int i =1900;i < nowyear;i++){
                //在这我们要判断一下年份是不是闰年,是闰年我们就给天数加366
                if (i % 4 ==0&&i %100 != 0||i %400 ==0){
                    alldays += 366;
                }
                //如果不是闰年就给天数加上365
                else{
                    alldays += 365;
                }
            }
            //计算到当前月的天数1,3,5,7,8,10,11,一个月是314,6,9,11,一个月是30天,闰年229,平年28
            for (int i = 1;i < nowmonth;i++){
                if (i == 1||i == 3||i == 5||i == 7||i == 8||i == 10||i == 11){
                    alldays += 31;
                }else if (i == 4||i == 6||i == 9||i == 12){
                    alldays += 30;
                }else if (nowyear %4 ==0&&nowyear %100 != 0||nowyear % 400 ==0){
                    alldays += 29;
                }else{
                    alldays += 28;
                }
            }
            //月份前面的空格计算.所有的天数对7取余
            remainder = alldays%7;
           // System.out.println(remainder);
            //计算本月份的天数
                if (nowmonth == 1||nowmonth == 3||nowmonth == 5||nowmonth == 7||nowmonth == 8||nowmonth == 10||nowmonth == 11){
                    monthdays = 31;
                }else if (nowmonth == 4||nowmonth == 6||nowmonth == 9||nowmonth == 12){
                    monthdays = 30;
                }else if (nowyear %4 ==0&&nowyear %100 != 0||nowyear % 400 ==0){
                    monthdays = 29;
                }else{
                    monthdays = 28;
                }
            //System.out.println(monthdays);
            System.out.print("一\t二\t三\t四\t五\t六\t日\t");
            System.out.println();
            //打印前面的空格
            for (int i = 1;i <= remainder;i++){
                System.out.print("\t");
            }
            //打印月份的号数
            for (int i = 1;i <= monthdays;i++){
                //在这我们要提醒,我们日期的打印的时候,是对余数加上号数对7取余,满7换行,余数不为0就不换行,为0就换行
                if ((remainder +i) % 7 == 0 ){
                    System.out.println(i+"\t");
                }else{
                    System.out.print(i+"\t");
                }
            }
        }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 10月1日
  • 已采纳回答 9月23日
  • 创建了问题 9月23日

悬赏问题

  • ¥15 求红米或者任意工作安卓机ro,ot之后劫c ,h ,i摄像头, 实现无人直播瞒过抖音直播助手的教程, 或者远程 协助也可以。
  • ¥15 elasticsearch
  • ¥30 python ttk 获取下拉框问题
  • ¥15 uniapp的uni-datetime-picker组件在ios端不适配
  • ¥15 前端 uniapp App端在离线状态如何使用modbus 连接手机蓝牙进行读写操控机器?
  • ¥15 SQL语句根据字段自动生成行
  • ¥500 “掌声响起来”软件(不确定性人工智能)
  • ¥500 我要找大模型一体机产品手册和应用案例
  • ¥20 关于游戏c++语言代码问题
  • ¥15 如何制作永久二维码,最好是微信也可以扫开的。(相关搜索:管理系统)