import java.util.Scanner;
public class Calendar {
public static void main(String[] args) {
/** * 万年历 输入一个年份,再输入一个月份,把那个月的日历打印出来,(1900年1月1日是星期一)。 * a:先输出提示语句,并接受用户输入的年、月。 * b:根据用户输入的年,先判断是否是闰年。(闰年2月有29天,平年2月有28天); * C:根据用户输入的月来判断月的天数。 * D:用循环计算用户输入的年份距1900年1月1日(星期一)的总天数。 * E:用循环计算用户输入的月份距输入的年份的1月1日共有多少天。* * F:相加D与E的天数,得到总天数。 * G:用总天数来计算输入月的第一天的星期数。 * H:根据G的值,格式化输出这个月的日历! * * H提示: * 1.如果当月1日如果不是周日先打印第一行,再打印后面的 * (1)startDay=0~5,先打印若干个空格,startDay==0时,是星期一,应该在星期日处打印一个空格,以此类推[0~startDay+1) * (2)再打印第一行的日期[1,7-startDay) * (3)打印换行 * (4)第一行打印的天数为:1~(6-startDay),所以第二行从7-startDay开始打印,打印到当月总天数为止,每7个换行 * 2.如果startDay是6(周日),直接从1日开始打印到最后一天,每7个换行 提示:当月1日如果不是周日,应循环输出\t以便对齐 * 当月1日的星期数加上日期的号,如果能被7整除,则应换行. */
Scanner scanner = new Scanner(System.in);
while (true) {
System.out.println();
System.out.println("请输入年份:");
int year = scanner.nextInt();
System.out.println("请输入月份:");
int month = scanner.nextInt();
int yearSum = yearSum(year);
int monthSum = monthSum(year, month);
int daySum = yearSum + monthSum;
int oneDay = whatDay(daySum + 1);
System.out.println("\t" + "\t" + "\t" + year + "年" + month + "月");
System.out.println("----------------------------------------------------");
System.out.println("星期日\t星期一\t星期二\t星期三\t星期四\t星期五\t星期六");
print(year, month, oneDay);
}
}
// 判断该年份1月1日到1900年1月1日的总天数
public static int yearSum(int year) {
int yearSum = 0;
if (year < 1900) {
System.out.println("请输入大于1900年的年份:");
} else {
for (int i = 1900; i < year; i++) {
if (isLeapYear(i)) {
yearSum += 366;
} else {
yearSum += 365;
}
}
}
return yearSum;
}
// 判断该月份到1月1日的总天数
public static int monthSum(int year, int month) {
int monthSum = 0;
if (month < 0 || month > 12) {
System.out.println("请输入1~12的正确月份:");
} else {
for (int i = 1; i < month; i++) {
monthSum += monthNumber(year, i);
}
}
return monthSum;
}
// 判断年份是否为闰年
public static boolean isLeapYear(int year) {
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
return true;
} else {
return false;
}
}
// 判断月份的天数
public static int monthNumber(int year, int month) {
int monthNumber = 0;
switch (month) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
monthNumber = 31;
break;
case 4:
case 6:
case 9:
case 11:
monthNumber = 30;
break;
case 2:
if (isLeapYear(year)) {
monthNumber = 29;
} else {
monthNumber = 28;
}
break;
}
return monthNumber;
}
// 判断该日为星期几
public static int whatDay(int daySum) {
int whatDay = 0;
if (daySum % 7 == 0) {
whatDay = 7;
} else {
whatDay = daySum % 7;
}
return whatDay;
}
// 打印日历
public static void print(int year, int month, int oneDay) {
// 打印空格
for (int i = 0; i < oneDay; i++) {
System.out.print("" + "\t");
}
int day = monthNumber(year, month);
for (int i = 1; i <= day; i++) {
if ((oneDay + i - 1) % 7 == 0) {
System.out.println();
}
System.out.print(" " + i + "\t");
}
}
}
今天的文章Java版-万年历分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/31255.html