java万年历代码解析 java一个简单的万年历

JAVA万年历代码/*
题目:输出任意年份任意月份java万年历代码解析的日历表(公元后)
思路:
1.已知1年1月1日是星期日,1 % 7 = 1 对应java万年历代码解析的是星期日,2 % 7 = 2 对应java万年历代码解析的是星期一,以此类推;
2.计算当年以前所有天数 当年当月1号之前所有天数;
a.年份分平年闰年,平年365天,闰年366天;
b.闰年java万年历代码解析的判断方法year % 400 == 0 || (year % 100 != 0year % 4 == 0)若为真,则为闰年否则为平年;
c.定义平年/闰年数组,包含各月天数;
d.遍历数组求和,计算当年当月前总天数;
e.当年以前所有天数 当年当月前总天数 1即为1年1月1日到当年当月1日的总天数;
3.总天数对7取模,根据结果判断当月1号是星期几,输出空白区域;
4.输出当月日历表,逢星期六换行
*/
import java.util.Scanner;
class FindMonthList {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.println("请输入年份:");
int year = sc.nextInt();//年份
if (year1) {//判断非法输入年份
System.out.println("输入错误!");
return;
}
System.out.println("请输入月份:");
int month = sc.nextInt();//月份
if (month1 || month12) {//判断非法输入月份
System.out.println("输入错误!");
return;
}
//输出表头
System.out.println("-------"year" 年 "month" 月 ""-------");
System.out.println();
System.out.println("日一二三四五六");
//计算当前年份以前所有天数beforeYearTotalDay;每4年一个闰年,闰年366天,平年365天
int beforeYearTotalDay = ((year - 1) / 4 * 366)(year-1 - ((year - 1) / 4)) * 365;
int[] arrLeapYear = {0,31,29,31,30,31,30,31,31,30,31,30,31};//闰年各月天数int数组
int[] arrNormalYear = {0,31,28,31,30,31,30,31,31,30,31,30,31};//平年各月天数int数组
int beforeMonthTotalDay = 0;//定义本年当月之前月份的总天数
if (year % 400 == 0 || (year % 100 != 0year % 4 == 0)) {//判断当前年份是否是闰年
for (int i = 0 ; imonth ; i) {//for循环计算当月之前总天数
//计算当前月份之前的所有天数
beforeMonthTotalDay = beforeMonthTotalDayarrLeapYear[i];
}
//判断当月1日是星期几
int totalDay = beforeYearTotalDaybeforeMonthTotalDay1;
int week = totalDay % 7;//已知1年1月1日是星期日,即模7得1对应的是星期日
for (int i = 0 ; i(week - 17) % 7 ; i) {//如果写成i(week-1)会出现i-1的情况
System.out.print("");//输出开头空白
}
【java万年历代码解析 java一个简单的万年历】for (int i = 1 ;i = arrLeapYear[month] ;i) {//for循环输出各月天数
System.out.print(i"");
if (i10 ) {//小于10的数补一个空格,以便打印整齐
System.out.print(" ");
}
if (i % 7 == ((7-(week - 1)) % 7 ) || i == arrLeapYear[month]) {//每逢星期六/尾数换行
System.out.println();
}
}
} else {//不是闰年就是平年
for (int i = 0 ; imonth ; i) {//for循环计算出当月之前月份总天数
beforeMonthTotalDay = beforeMonthTotalDayarrNormalYear[i];
}
//判断当月1日是星期几
int totalDay = beforeYearTotalDaybeforeMonthTotalDay1;
int week = totalDay % 7;//已知1年1月1日是星期日,即模7得1对应的是星期日
for (int i = 0 ; i(week - 17) % 7 ; i) {//如果写成i(week-1)会出现i-1的情况
System.out.print("");//输出开头空白
}
for (int i = 1 ;i = arrNormalYear[month] ;i) {//for循环输出各月天数
System.out.print(i"");
if (i10 ) {//小于10的数补一个空格,以便打印整齐
System.out.print(" ");
}
if (i % 7 == ((7-(week - 1)) % 7 ) || i == arrNormalYear[month]) {//每逢星期六/尾数换行
System.out.println();
}
}
}
}
}
显示效果:
java中 , 一段万年历代码,跑起来总是差4天,修改之后也只能让一部分月份的显示正确,代码如下我改造了一下你的代码 :
package com.mikuma.calendar;
import java.util.GregorianCalendar;
import java.util.Scanner;
public class Calendar{
public static void main(String[] args){
int year = 0;
int month = 0;
Scanner scanner = new Scanner(System.in);
System.out.println("请输入您要查询的年份");
year = scanner.nextInt();
System.out.println("请输入您要查询的月份");
while (true){
month = scanner.nextInt();
if (month0 || month12){
System.out.println("月份输入有误,请重新输入");
}else{
break;
}
}
printPermanentCalendar(year, month);
}
/**
* 输出万年历
*
* @param year
* @param month
*/
private static void printPermanentCalendar(int year,int month){
int days = 0;
int totaldays = 0;//获取1990年至查询的年份的天数
for (int i = 1900; iyear; i){
totaldays = totaldays(isLeapYear(i) ? 366 : 365);
}
int beforedays = 0;//到指定月份的天数
for (int i = 1; i = month; i){
switch (i) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
days = 31;
break;
case 4:
case 6:
case 9:
case 11:
days = 30;
break;
case 2:
days = isLeapYear(year) ? 29 : 28;
break;
default:
break;
}
if (imonth){
beforedays = beforedaysdays;
}
}
totaldays = totaldaysbeforedays;//总计天数,以判断周几;
int weekDay = 0;
int temp = (1totaldays) % 7;
if (temp == 0){//1990年1月1日星期一,据此日0天星期一 , 以此类推
weekDay = 0;
}else{
weekDay = temp;
}
System.out.println("星期日\t星期一\t星期二\t星期三\t星期四\t星期五\t星期六");
for (int i = 0; iweekDay; i){
System.out.print("\t");
}
for (int i = 1; i = days; i){
System.out.print(i"\t");
if ((totaldaysi) % 7 == 6){
System.out.print("\n");
}
}
}
private static boolean isLeapYear(int year){
return new GregorianCalendar().isLeapYear(year);
}
}
运行:
对比了下 360日历:
结果正确
我们再测试下 2017 年 2月
对比360 日历
也是正确
关于用 java 语言编写的万年历的解读sum 1就是java万年历代码解析你所要求的月份的第一天啊,你是算到前一个月底的天数java万年历代码解析了,得加一才是你所要求的月份的第一天 。
java万年历代码解析的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java一个简单的万年历、java万年历代码解析的信息别忘了在本站进行查找喔 。

    推荐阅读