编写万年历(要求输入年份和月份打印这个月的日历)

复制代码
public static void main(String[] args){
  Scanner sc=new Scanner(System.in);
  System.out.println("请输入一个年份:");
  //接收年份
  int year=sc.nextInt();
  System.out.println("请输入一个月份:");
  //接收月份
  int month=sc.nextInt();
  //累计跨年的天数
  int yearTotal=0;
  //计算跨年的天数(当年的不能算,不然整年的天数都加上了)
  for(int i=1900;i<year;i++){
    //闰年加366
    if(i%4==0&&i%100!=0||i%400==0){
      yearTotal+=366;
    }
    //平年加365
    else{
      yearTotal+=365;
    }
  }

  //累计跨月总天数
  int monthTotal=0;
  //记录每月的天数
  int day=0;
  //i<=month方便后面计算的当月有多少天,但是计算这个月之前总天数时,不能加上本月,所以后面加总的时候要判断
  for(int i=1;i<=month;i++){
    switch(i){
      case 2:day=year%4==0&&i%100!=0||i%400==0?29:28;
        break;
      case 4:
      case 6:
      case 9:
      case 11:
        day=30;
        break;
      default:
        day=31;
      //只要不等于当月的天数,则累计加总
      if(i<month){
        monthTotal+=day;
      }
    }
  }

  //记录本月1号是否被7整除,余数是多少,就是周几
  int week=(yearTotal+monthTotal+1)%7;
  System.out.println("本月1号是周"+week);
  //1号是周几,前面对应就有几个\t,循环输入
  System.out.println("日\t一\t二\t三\t四\t五\t六");
  //打印1号前面的空格
  for(int i=1;i<=week;i++){
    System.out.print("\t");
  }
  //打印每个月的日期数
  for(int i=1;i<=day;i++){
    System.out.println(i+"\t");
    if(yearTotal+monthTotal+i%7==6){
      //如果是周六则换行打印
      System.out.println();
    }
  }
}
复制代码

 

posted @   小小野生程序员sunny  阅读(993)  评论(0编辑  收藏  举报
(评论功能已被禁用)
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示