import java.util.Scanner;
public class CalendarText {
public static int year, weekday, month, flag;
public int Inputyear() {
Scanner s = new Scanner(System.in);
System.out.println("请输入一个年份:");
String str = s.nextLine().trim();
while (true) {
if (str.matches("//d{4}")) {
year = Integer.parseInt(str);
System.out.println(year);
return year ;
}
System.out.println("请输入一个年份:");
str = s.nextLine().trim();
}
}
public boolean isLeapYear(int year) {
return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
}
public int yearOfFistDay(int y) {
long lo = y * 365;
for (int i = 1; i < y; y++) {
if (this.isLeapYear(y))
lo += 1;
}
return (int) (lo % 7);
}
public void start() {
System.out.println("=======================================");
if(this.isLeapYear(year)){
System.out.println("此年是闰年");
}
System.out.println(" " + year + "年");
}
public int getMonth(int month) {
int monthday = 0;
switch (month) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
monthday = 31;
break;
case 4:
case 6:
case 9:
case 11:
monthday = 30;
break;
case 2:
if (this.isLeapYear(year)) {
monthday = 29;
} else {
monthday = 28;
}
break;
}
return monthday;
}
public void indexMonth() {
for (int i = 1; i <= 12; i++) {
month = i;
System.out.println(month + "月");
System.out.println("日 一 二 三 四 五 六");
int k = this.getMonth(month);
for (int j = 0; j <weekday; j++) {
System.out.print(" ");
}
for (int day = 1; day <= k; day++) {
if (day < 10) {
System.out.print(day + " ");
} else {
System.out.print(day + " ");
}
weekday = (weekday + 1) % 7;
if (weekday == 0) {
System.out.println();
}
}
System.out.println();
}
}
public static void main(String[] args) {
CalendarText ct = new CalendarText();
ct.Inputyear();
weekday = ct.yearOfFistDay(year);
ct.start();
ct.indexMonth();
}
}
这个程序自己弄完之后发现那个效率很低很低……
计算一年的头一天是周几 的时候运算数据很庞大,大家有没有更好的方法解决这个问题??