教大家如何用方法制作一本万年历!
下面用方法声明和调用写一半从1900年开始的万年历。
- 下面就让我们一起来制作一本属于自己的万年历吧!
//因为1900年1月1号正好星期一所以我们日历从1900年开始。
import java.util.Scanner;
public class Calendar{
public static void main(String[] args){
//首先我们先用Scanner获取自己想要查询的年和月。
Scanner input = new Scanner(System.in);
System.out.print("请输入你想要查询的年份:");
int year = input.nextInt();
System.out.print("请输入你想要查询的月份:");
int month = input.nextInt();
int yearDays = getYearDays(year); //调用getYearDays方法
System.out.println("1900年到"+ year + "年总共有" + yearDays + "天"); // [1900,year)年的总天数
int days = getDays(month, year); //调用getDays方法
System.out.println(year + "年" + month + "月有" + days +"天"); // year年当月的天数
int monthDays = getMonthDays(month, year); //调用getMonthDays方法
System.out.println(year + "年1月到" + month + "月一共" + monthDays + "天"); // year年月的总天数
//然后把万年历格式弄出来。
System.out.println("星期日\t星期一\t星期二\t星期三\t星期四\t星期五\t星期六\t");
newLine(yearDays + monthDays, days); //allDays是1900到 year年month月的总天数
}
/**
* 判断是否为闰年
* @param year 输入的年份
* @return 返回year确定是否是闰年
*/
public static boolean isRunYear(int year) { //判断是否为闰年
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
return true;
}
return false;
}
/**
* [1900,year)年的总天数
* @param year 输入的年份
* @return 返回年的总天数
*/
public static int getYearDays(int year) { //年的总天数
int yearDays = 0;
for (int i = 1900; i < year; i++) {
if (isRunYear(i)) {
yearDays += 366;
}
else{
yearDays += 365;
}
}
return yearDays;
}
/**
* year年当月的天数
* @param year 输入的年份
* @return 返回year年当月的总天数
*/
public static int getDays(int month,int year){ //返回当前月的天数
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 (isRunYear(year)) {
return 29;
}
return 28;
}
return 0; //如果传入的月份不再[1, 12]之间,那么就意味着switch中的所有case都不会匹配
}
/**
* year年月的总天数
* @param month 输入的月份
* @param year 输入的年份
* @return 返回monthDays,月的总天数
*/
public static int getMonthDays(int month, int year) { // 月的总天数
int days = 0;
int monthDays = 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:
if (isRunYear(year)) {
days = 29;
}
else {
days = 28;
}
}
monthDays += days;
}
monthDays -= days; //因为不能加上year年month月的天数所以减去month月的天数
return monthDays;
}
/**
* 输出日历表的格式
* @param allDays 年和月的总天数
* @param days year年当月的总天数
*/
public static void newLine(int allDays, int days) { //输入日历表的格式
int newline = allDays % 7 + 1;
for (int i = 0; i < newline && newline != 7; i++) { //决定前面空几个
System.out.print("\t");
}
for (int i = 1; i <= days; i++) { //每隔一个空一个\t.
System.out.print(i + "\t");
if ((newline + i) % 7 == 0) { // 隔7个就换行
System.out.println();
}
}
}
}
能看到这里我就很高兴了。
我是个新手加菜鸟,写的不好请大家多多包涵!
谢谢大家支持!谢谢!
就这样啦,ヾ( ̄▽ ̄)ByeBye!