**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. 下面是参考答案代码:
代码语言:javascript复制// 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%-5sn", "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);
}
}
}