编写Java程序随机输入日期计算星期几,打印任意一年的日历

简介: 编写Java程序随机输入日期计算星期几,打印任意一年的日历

需求说明:


随机输入日期计算星期几,打印任意一年的日历

已知,1900年1月1日是星期1,用户随机输入年月日,计算星期几


48.png


实现思路:


一、知道1900年1月1日为星期一,求输入的年份月份与1900年1月1日相隔的总天数。闰年366天,平年365天。

 

通过运算符实现闰年判断的条件:

(1)能被4整除且不能被100整除的年份

(2)能被400整除的年份

(3)两个条件只需要满足其中任意一个即可,故闰年判断的条件:


((i % 4 == 0)&&(i % 100 != 0))||(i % 400 == 0)


实现代码:


import java.util.Scanner;
public class Calendar {
  public static void main(String[] args){
    //第一步:接收用户输入的年份和月份
     Scanner input=new Scanner(System.in);
     System.out.println("请输入年份");
     int year=input.nextInt();
     System.out.println("请输入月份");
     int month=input.nextInt();
     int day=0;
     //第二步:求输入的年份月份与1900年1月1日相隔的总天数
     for (int i = 1900; i < year; i++) {
       if ((i % 4 == 0 && i % 100 != 0)||(i % 400 == 0)) {
        day+=366;
      }else {
        day+=365;
      }
     }
      //求相隔月份的天数
     for (int i = 1; i < month; i++) {
      if (i==2) {
        if ((year%4==0&&year%100!=0)||(year%400==0)) {
          day+=29;
        }else {
          day+=28;
        }
      }else if (i==4||i==6||i==9||i==11) {
        day+=30;
      }else {
        day+=31;
      }
     }
     //第三步:计算上个月最后一天是星期几
    int weeks=day%7;
    int day2=0;
    switch (month) {
      case 2:
        if (year%4==0&&year%100!=0||year%400==0) {
          day2+=29;
        }else {
          day2+=28;
        }
          break;
      case 4:
      case 6:
      case 9:
      case 11:
        day2=30;
                break;
      default:
        day2=31;
          break;
    }
    //第四部:打印日历
    System.out.println("一\t二\t三\t四\t五\t六\t日");
    for (int i = 1; i <= weeks; i++) {
      System.out.print(" \t");
    }
    for (int i = 1; i <= day2; i++) {
      System.out.print(i+"\t");
      if ((i+weeks)%7==0) {
        System.out.println();
      }
    }
  }
}
相关文章
|
2月前
|
Java 流计算
利用java8 的 CompletableFuture 优化 Flink 程序
本文探讨了Flink使用avatorscript脚本语言时遇到的性能瓶颈,并通过CompletableFuture优化代码,显著提升了Flink的QPS。文中详细介绍了avatorscript的使用方法,包括自定义函数、从Map中取值、使用Java工具类及AviatorScript函数等,帮助读者更好地理解和应用avatorscript。
利用java8 的 CompletableFuture 优化 Flink 程序
|
20天前
|
存储 分布式计算 Java
存算分离与计算向数据移动:深度解析与Java实现
【11月更文挑战第10天】随着大数据时代的到来,数据量的激增给传统的数据处理架构带来了巨大的挑战。传统的“存算一体”架构,即计算资源与存储资源紧密耦合,在处理海量数据时逐渐显露出其局限性。为了应对这些挑战,存算分离(Disaggregated Storage and Compute Architecture)和计算向数据移动(Compute Moves to Data)两种架构应运而生,成为大数据处理领域的热门技术。
40 2
|
24天前
|
分布式计算 Java MaxCompute
ODPS MR节点跑graph连通分量计算代码报错java heap space如何解决
任务启动命令:jar -resources odps-graph-connect-family-2.0-SNAPSHOT.jar -classpath ./odps-graph-connect-family-2.0-SNAPSHOT.jar ConnectFamily 若是设置参数该如何设置
|
2月前
|
Java Maven 数据安全/隐私保护
如何实现Java打包程序的加密代码混淆,避免被反编译?
【10月更文挑战第15天】如何实现Java打包程序的加密代码混淆,避免被反编译?
57 2
|
2月前
|
安全 Java Linux
java程序设置开机自启
java程序设置开机自启
105 1
|
2月前
|
机器学习/深度学习 算法 搜索推荐
让星星⭐月亮告诉你,Java冒泡排序及其时间复杂度计算
冒泡排序是一种简单的排序算法,通过多次遍历数组,每次比较相邻元素并交换位置,将较小的元素逐步移至数组前端。第一轮结束后,最小值会位于首位;第二轮则将次小值置于第二位,依此类推。经过 (n-1) 轮遍历后,数组完成排序。冒泡排序的时间复杂度为 O(n²),在最优情况下(已排序数组)时间复杂度为 O(n)。示例代码展示了如何实现冒泡排序。
52 1
|
2月前
|
运维 Java Linux
【运维基础知识】Linux服务器下手写启停Java程序脚本start.sh stop.sh及详细说明
### 启动Java程序脚本 `start.sh` 此脚本用于启动一个Java程序,设置JVM字符集为GBK,最大堆内存为3000M,并将程序的日志输出到`output.log`文件中,同时在后台运行。 ### 停止Java程序脚本 `stop.sh` 此脚本用于停止指定名称的服务(如`QuoteServer`),通过查找并终止该服务的Java进程,输出操作结果以确认是否成功。
42 1
|
2月前
|
分布式计算 资源调度 Hadoop
Hadoop-10-HDFS集群 Java实现MapReduce WordCount计算 Hadoop序列化 编写Mapper和Reducer和Driver 附带POM 详细代码 图文等内容
Hadoop-10-HDFS集群 Java实现MapReduce WordCount计算 Hadoop序列化 编写Mapper和Reducer和Driver 附带POM 详细代码 图文等内容
98 3
|
25天前
|
Java API Apache
java集合的组内平均值怎么计算
通过本文的介绍,我们了解了在Java中计算集合的组内平均值的几种方法。每种方法都有其优缺点,具体选择哪种方法应根据实际需求和场景决定。无论是使用传统的循环方法,还是利用Java 8的Stream API,亦或是使用第三方库(如Apache Commons Collections和Guava),都可以有效地计算集合的组内平均值。希望本文对您理解和实现Java中的集合平均值计算有所帮助。
25 0
|
2月前
|
Java Python
如何通过Java程序调用python脚本
如何通过Java程序调用python脚本
32 0
下一篇
无影云桌面