java万年历代码_java实现控制台万年历

本文介绍了一个Java程序,用于在控制台打印用户输入的年份和月份的万年历。程序首先获取用户输入的年份和月份,然后通过一系列方法计算并打印出相应的日历布局,包括月份的总天数、星期的排列等。核心功能包括判断闰年、获取指定月份天数以及计算打印空格数量等。
摘要由CSDN通过智能技术生成

import java.util.Scanner;

public class MyCalendar {

public static void main(String[] args) {

//System.out.println(getTotalDays(2017,3));

printCalendar();

}

public static void printCalendar(){

System.out.println("请输入4位年份");

Scanner input = new Scanner(System.in);

int nian = input.nextInt();

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

int yue = input.nextInt();

System.out.println("\t\t\t"+nian+","+yue);

System.out.println("----------------------------------------------------------");

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

//1号前边先打印几个 \t,打印几个呢 应该是getTotalDays(年,月)

int spaces = getTotalDays(nian, yue)%7;

for(int i = 0;i

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

}

int days = getDaysOfMonth(nian, yue);

for (int i = 1; i <=days; i++) {

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

if((i+spaces) % 7 == 0){

System.out.println();

}

}

}

//定义一个方法,返回1905年1.1 到指定年份指定月份的上一个月月底,一共有多少天? 2017 4

//1905.1.1 - 2017.3.31 总天数

//1905.1.1 - 2016.12.31 + 会求!

//2017.1.1 - 2017.3.31 会求!

private static int getTotalDays(int year,int month){

return getDaysFrom1905(year) + getDaysThisYear(year,month);

}

//定义一个方法,返回指定年份1月1日 到 指定月份的前一个月月底的天数, 2017.4 2017.1.1-2017.3.31

public static int getDaysThisYear(int year,int month){//2017.4

//一共 , 累加 循环 for

int sum = 0;

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

sum += getDaysOfMonth(year,i);

}

return sum;

}

//定义一个方法; 返回指定年份,指定月份的天数1842 1 3 5 7 8 10 12

// 4 6 9 11 --- 30 2 -- 平年 28 闰年29年

private static int getDaysOfMonth(int year,int month){

/*if(month == 1 ||month == 3 ||month == 5

||month == 7 ||month == 8 ||month == 10 ||month == 12){

return 31;

}else if(month == 4||month == 6 ||month == 9 ||month == 11){

return 30;

}else if(month == 2){

//需要对当前年份进行判断

if(isRun(year)){

return 29;

}else{

return 28;

}

}else{

return 0;

}*/

switch (month) {

case 1:

case 3:

case 5:

case 7:

case 8:

case 10:

case 12:

return 31;

case 4:

case 6:

case 9:

case 11:

return 30;

case 2:

if(isRun(year)){

return 29;

}else{

return 28;

}

default:

return 0;

}

}

//从1905年 到指定年份的上一年的年底一共多少天;2017 1905.1.1 - 2016.12.31

//求和 -- 累加 -- 循环 1905-365 1906-365 1907-365 1908-366

private static int getDaysFrom1905(int year){//1909

int sum = 0;

for(int i = 1905;i

//如果闰年 += 366 1905 1906 1907 1908

if(isRun(i)){

//是

sum += 366;

}else{

sum += 365;

}

}

return sum;

}

// 定义一个方法,判断某个年份是否是闰年,如果是返回true,否则返回false;

private static boolean isRun(int year) {

// 2016 是 2017 不是 2000 是 2100 不是

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

return true;

}

return false;

}

5f44669d9023f819b9cfa4031178418d.png

java 万年历程序代码 package test2; import java.util.Scanner; public class Test2{ public static void main(String[] args) { Scanner input=new Scanner(System.in); System.out.print("请输入年份:"); int year=input.nextInt(); System.out.print("\n请输入月份:"); int month=input.nextInt(); System.out.println(); int totalDays=0; if(year>=1900) { for(int i=1900;i<year;i++) { if((i%4==0 && i0!=0)||(i%400==0)) totalDays+=366; else totalDays+=365; } int daysOfMonth=0; int days; for(int i=1;i<month;i++) { switch(i) { case 2: if((year%4==0 && year0!=0)|| year%400==0) days=29; else days=28; break; case 4: case 6: case 9: case 11: days=30; break; default: days=31; } daysOfMonth+=days; } switch(month) { case 2: if((year%4==0 && year0!=0)|| year%400==0) days=29; else days=28; break; case 4: case 6: case 9: case 11: days=30; break; default: days=31; } totalDays+=daysOfMonth; int firstDay=(totalDays)%7+1; if(firstDay==7)firstDay=0; System.out.println("星期日\t星期一\t星期二\t星期三\t星期四\t星期五\t星期六");//显示月历 for(int i=0;i<firstDay;i++) System.out.print("\t"); for(int i=1;i<=days;i++) { System.out.print(i+"\t"); if((i-1)%7+firstDay==6) System.out.println(); } } else if(year>0&&year<1900) { for(int i=1899;i>year;i--) { if((i%4==0 && i0!=0)||(i%400==0)) totalDays+=366; else totalDays+=365; } int daysOfMonth=0; int days; for(int i=12;i>=month;i--) { switch(i) { case 2: if((year%4==0 && year0!=0)|| year%400==0) days=29; else days=28; break; case 4: case 6: case 9: case 11: days=30; break; default: days=31; } daysOfMonth+=days; } switch(month) { case 2: if((year%4==0 && year0!=0)|| year%400==0) days=29; else days=28; break; case 4: case 6: case 9: case 11: days=30; break; default: days=31; } totalDays+=daysOfMonth; int firstDay=8-(totalDays)%7; if(firstDay==7)firstDay=0; if(firstDay==8)firstDay=1; System.out.println("星期日\t星期一\t星期二\t星期三\t星期四\t星期五\t星期六"); for(int i=0;i<firstDay;i++) System.out.print("\t"); for(int i=1;i<=days;i++) { System.out.print(i+"\t"); if((i-1)%7+firstDay==6) System.out.println(); } } System.out.println("\n程序结束"); } }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值