第六章第三十四题(打印日历)(Print calendar) - 编程练习题答案

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

**6.34(Print calendar) Programming Exercise 3.21 uses Zeller’s congruence to calculate the day of the week. Simplify Listing 6.12, PrintCalendar.java, using Zeller’s algorithm to get the start day of the month.
下面是参考答案代码:

// https://cn.fankuiba.com
import java.util.Scanner;

public class Ans6_34_page205 {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.print("Enter full year (e.g., 2012): ");
        int year = input.nextInt();
        System.out.print("What day is January 1, "+year+" ? ");
        int week = input.nextInt();

        int month = 1, day = 0;
        String monthString = "";
        boolean leapYear;

        if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0 && year % 3200 != 0) || year % 172800 == 0)
            leapYear = true;
        else
            leapYear = false;

        for (; month <= 12; month++) {
            switch (month) {
                case 1:
                    monthString = "January";
                    break;
                case 2:
                    day += 31;
                    monthString = "February";
                    break;
                case 3:
                    monthString = "March";
                    if (leapYear)
                        day += 29;
                    else
                        day += 28;
                    break;
                case 4:
                    day += 31;
                    monthString = "April";
                    break;
                case 5:
                    day += 30;
                    monthString = "May";
                    break;
                case 6:
                    day += 31;
                    monthString = "June";
                    break;
                case 7:
                    day += 30;
                    monthString = "July";
                    break;
                case 8:
                    day += 31;
                    monthString = "August";
                    break;
                case 9:
                    day += 31;
                    monthString = "September";
                    break;
                case 10:
                    day += 30;
                    monthString = "October";
                    break;
                case 11:
                    day += 31;
                    monthString = "November";
                    break;
                case 12:
                    day += 30;
                    monthString = "December";
            }
            int days = (week + day) % 7;
            System.out.print("\n           " + monthString + " " + year + "\n---------------------------------");
            System.out.printf("\n%-5s%-5s%-5s%-5s%-5s%-5s%-5s\n", "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat");

            for (int n =1;n<=days;n++) {
                System.out.printf("%-5s", "");
            }

            int j = 1;
            if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 ||
                    month == 12) {
                for (; j <= 31; j++) {
                    System.out.printf("%-5d", j);
                    if ((days+j) % 7 == 0)
                        System.out.println();
                }
            }
            else if (month == 2 && leapYear) {
                for (; j <= 29; j++) {
                    System.out.printf("%-5d", j);
                    if ((days+j) % 7 == 0)
                        System.out.println();
                }
            }
            else if (month == 2) {
                for (; j <= 28; j++) {
                    System.out.printf("%-5d", j);
                    if ((days+j) % 7 == 0)
                        System.out.println();
                }
            }
            else {
                for (; j <= 30; j++) {
                    System.out.printf("%-5d", j);
                    if ((days + j) % 7 == 0)
                        System.out.println();
                }
            }
            System.out.print("\n");
            switch (days) {
                case 0:
                    System.out.print("Sun");break;
                case 1:
                    System.out.print("Mon");break;
                case 2:
                    System.out.print("Tue");break;
                case 3:
                    System.out.print("Wed");break;
                case 4:
                    System.out.print("Thu");break;
                case 5:
                    System.out.print("Fri");break;
                case 6:
                    System.out.print("Sat");
            }
            System.out.println(" starts on the first day of "+monthString);
        }
    }
}

适用Java语言程序设计与数据结构(基础篇)(原书第11版)Java语言程序设计(基础篇)(原书第10/11版)更多

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值