我改造了壹下妳的代碼 :
package?com.mikuma.calendar;import?java.util.GregorianCalendar;
import?java.util.Scanner;
public?class?Calendar{
public?static?void?main(String[]?args){
int?year?=?0;
int?month?=?0;
Scanner?scanner?=?new?Scanner(System.in);
System.out.println("請輸入您要查詢的年份");
year?=?scanner.nextInt();
System.out.println("請輸入您要查詢的月份");
while?(true){
month?=?scanner.nextInt();
if?(month?<?0?||?month?>?12){
System.out.println("月份輸入有誤,請重新輸入");
}else{
break;
}
}
printPermanentCalendar(year,?month);
}
/**
*?輸出萬年歷 *? *?@param?year *?@param?month */private?static?void?printPermanentCalendar(int?year,int?month){
int?days?=?0;
int?totaldays?=?0;//獲取1990年至查詢的年份的天數
for?(int?i?=?1900;?i?<?year;?i++){
totaldays?=?totaldays?+?(isLeapYear(i)366?:?365);
}
int?beforedays?=?0;//到指定月份的天數
for?(int?i?=?1;?i?<=?month;?i++){
switch?(i)?{
case?1:
case?3:
case?5:
case?7:
case?8:
case?10:
case?12:
days?=?31;
break;
case?4:
case?6:
case?9:
case?11:
days?=?30;
break;
case?2:
days?=?isLeapYear(year)29?:?28;
break;
default:
break;
}
if?(i?<?month){
beforedays?=?beforedays?+?days;
}
}
totaldays?=?totaldays?+?beforedays;//總計天數,以判斷周幾;
int?weekDay?=?0;
int?temp?=?(1?+?totaldays)?%?7;
if?(temp?==?0){//1990年1月1日星期壹,據此日0天星期壹,以此類推
weekDay?=?0;
}else{
weekDay?=?temp;
}
System.out.println("星期日\t星期壹\t星期二\t星期三\t星期四\t星期五\t星期六");
for?(int?i?=?0;?i?<?weekDay;?i++){
System.out.print("\t");
}
for?(int?i?=?1;?i?<=?days;?i++){
System.out.print(i?+?"\t");
if?((totaldays?+?i)?%?7?==?6){
System.out.print("\n");
}
}
}
private?static?boolean?isLeapYear(int?year){
return?new?GregorianCalendar().isLeapYear(year);
}
}
運行:
對比了下 360日歷:
結果正確
我們再測試下 2017 年 2月?
對比 ?360 日歷
也是正確?