使用JAVA完成万年历

简介: 使用JAVA完成万年历

package cfy.Demos;

import java.util.Scanner;

//万年历

public class Demo1 {

public static void main(String[] args) {

 // TODO 自动生成的方法存根

 

 System.out.println("请输入年:");

 Scanner input = new Scanner(System.in);

 int year = input.nextInt();

 System.out.println("请输入月:");

 int month = input.nextInt();

 //6

 int totalYear = getFormYearTo1900TotalDays(year);

 int totalMonth = getNowYearToDays(year,month);

 //7 求星期 公式是 %7  --> 0~6之间的数字

 //0代表是星期日 以此类推

 int week = (totalMonth+totalYear+1)%7;

 //封装一个方法 这个方法进行格式输出

 FormatCalender(year,month,week);

}

 

/**

 * 格式化日历

 * @param year 输入的年份

 * @param month 输入的月份

 * @param week 输入的星期

 */

public static void FormatCalender(int year,int month,int week)

{

 //发现打印规律是逢7换行

 int cut = 0; //统计计数

 System.out.println("星期日\t\t星期一\t\t星期二\t\t星期三\t\t星期四\t\t星期五\t\t星期六");

 //0-6之间//打印星期

 for (int i = 1;i <= 6;i++)

 {

  System.out.print("\t\t");  //此处别用println,不然换行

 

  //统计计数

  cut++;

 }

 //打印日历天数

 for (int i = 1;i <=getNowMonthDays(year,month);i++)

 {

  //打印值

  System.out.print(i+"\t\t");

  cut ++;

  if(cut%7==0)

  {

   System.out.println();

  }

 }

 

}

 

//静态方法

/**

 * 判断闰年

 * @param year 年份

 * @return true 是闰年  false 不是闰年

 */

public static boolean isLeapYear(int year) {

 if ((year%4==0 && year%100!=0) || (year%400==0))

 {

  return true;

 }else

 {

  return false;

 }

}

 

/**

 * 通过月份获取对应的天数

 * @param year 对应的年份

 * @param month 对应的月份

 * @return 月份对应的天数

 */

public static int getNowMonthDays(int year,int month)

{

 switch(month)

 {

 case 2:

  return isLeapYear(year) ? 29 : 28;

 case 4:

 case 6:

 case 9:

 case 11:

  return 30;

  default:

   return 31;

 }

}

 

/**

 *  

 * @param year

 * @return

 */

public static int getFormYearTo1900TotalDays(int year)

{

 //定义一个变量用来计算总天数

 int sum = 0;

 for (int i= 1900;i

 {

  //isLeapYear(year); //计算的始终是同一个年份//因为和当前这个函数的参数同名了

  sum += isLeapYear(i) ? 366 : 365;

 }

 return sum;

}

 

/**

 * 当前月份距离1月1日的总天数

 * @param year 当前年份

 * @param month 当前月份

 * @return

 */

public static int getNowYearToDays(int year,int month)

{

 //定义一个变量用来计算总天数

 int sum = 0;

 for (int i = 1;i < month;i++)

 {

  sum += getNowMonthDays(year,i);

 }

 return sum;

}

 

}

相关文章
|
6天前
|
Java Android开发
万年历【小游戏】(Java课设)
万年历【小游戏】(Java课设)
23 2
|
6天前
|
Java Android开发
日历/万年历【小游戏】(Java课设)
日历/万年历【小游戏】(Java课设)
21 1
日历/万年历【小游戏】(Java课设)
|
9月前
|
安全 固态存储 Java
基于Java的万年历(课设)
Java编程语言自诞生十几年来,已经成功地运用在网络计算及移动等各个领域。对于开发者来说,它具有简单、面向对象、健壮、安全、结构中立、可移植和高效能等众多优点。此次我们用JAVA来设计一个万年历程序,该程序以网页形式运行,并且支持图形化界面,能以日历的形式显示日期与星期,用户能自己输入日期,支持查找日期,并且能够更新日期,是一个简单易用的小应用。
224 1
Java基础用Date类编写万年历
Java基础用Date类编写万年历
|
Java
JAVA 80行代码 写一个 万年历
今天突发奇想,写一个1899年12月31日到2021年的万年历(花了我半小时) /* *我是小白 */ //欢迎大佬来点评 //我想问各位大佬57-83行的日期输出怎末优化,有没有神魔好的建议
93 0
|
自然语言处理 算法 Java
【Java作业】万年历
【Java作业】万年历
【Java作业】万年历
|
Java
使用 java 基础语言实现万年历
已知(只有一个已知条件): 1900年1月1号是星期一 实现的功能: 通过本条件来写一个输入相应的年份和月份就可以在控制台输出相应月份月历 基本的思路: 已知1900年的1月1日是周一,要输出这个月的月历首先最需要知道的就是本月1号是周几,这样我们才可以排列出来这个月的月历第一天的位置 ...
1534 0
|
1天前
|
安全 Java 程序员
深入理解Java并发编程:线程安全与性能优化
【5月更文挑战第20天】本文将深入探讨Java并发编程的核心概念,包括线程安全和性能优化。我们将详细解析synchronized关键字、ReentrantLock类以及java.util.concurrent包中的高级工具类,如Semaphore、CountDownLatch和CyclicBarrier等。通过实例演示如何使用这些工具来提高多线程程序的性能和可靠性。
|
1天前
|
安全 算法 Java
深入理解Java并发编程:线程安全与性能优化
【5月更文挑战第20天】 在多核处理器日益普及的今天,并发编程成为了软件开发中不可忽视的重要话题。Java语言提供了丰富的并发工具和机制来帮助开发者构建高效且线程安全的应用程序。本文将探讨Java并发的核心概念,包括线程同步、锁机制、以及如何通过这些工具实现性能优化。我们将透过实例分析,揭示并发编程中的常见问题,并展示如何利用现代Java API来解决这些问题。