Java黑皮书课后题第6章:**6.34(打印日历)编程练习题3.21使用Zeller一致性原理来计算某天是星期几,使用Zeller的算法简化程序清单6-12以获得每月开始的第一天是星期几

本文介绍了如何使用Zeller一致性原理来计算特定日期是星期几,重点在于简化程序清单6-12,以确定每个月第一天的星期几。通过Zeller的算法公式,结合给定的月份(m)、日期(q)和年份(j、k),可以得出一周中的哪一天(h)。文章包含编程练习题3.21的详细解析和代码实现。
摘要由CSDN通过智能技术生成

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 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值