6.34(打印日历)编程练习题3.21使用Zeller一致性原理来计算某天是星期几,使用Zeller的算法简化程序清单6-12以获得每月开始的第一天是星期几
题目
题目描述
6.34(打印日历)编程练习题3.21使用Zeller一致性原理来计算某天是星期几,使用Zeller的算法简化程序清单6-12以获得每月开始的第一天是星期几
编程练习题3.21的Zeller一致性
泽勒一致性是由克里斯汀·泽勒开发的用于计算某天是星期几的算法:
h = (q + (26 * (m + 1)) / 10 + k + k / 4 + j / 4 + 5 * j) % 7
其中:
- h是一个星期中的某一天(0为星期六;1为星期天;2为星期一;3为星期二;4为星期三;5为星期四;6为星期五)
- q是某月的第几天
- m是月份(3为三月,4为四月,……,12为十二月),一月和二月分别记为上一年的13和14月
1月转为13,2月转为14,同时年份减1 - j是year / 100。
- k是该世纪的第几年(即year%100)
程序清单6-12原代码:英文解释已被更换为中文
import java.util.Scanner;
public class qingdan {
public static void main(String[] args) {
// 1. 获取用户输入
Scanner input = new Scanner(System.in);
// 获取用户输入年
System.out.print("Enter full year (e.g. , 2012):");
int year = input.nextInt();
// 获取用户输入月
System.out.print("Enter month as a number between 1 and 12:");
int month = input.nextInt();
// 打印
printMonth(year, month);
}
// 打印日历
public static void printMonth(int year, int month){
// 打印表头
printMonthTitle(year, month);
// 打印表格内容
printMonthBody(year, month);
}
// 打印表头的方法
public static void printMonthTitle(int year, int month){
System.out.println(" " + getMonthName(month) + " " + year);
System.out.println("---------------------------");
System.out.println(" Sun Mon Tue Wed Thu Fri Sat");
}
// 获取月份的英文名
public static String getMonthName(int month){
String monthName = "";
switch (month){
case 1: monthName = "January";break;
case 2: monthName = "February";break;
case 3: monthName = "March";break;
case 4: monthName = "April";break;
case 5: monthName = "May";break;
case 6: monthName