當前位置:編程學習大全網 - 源碼下載 - java中,壹段萬年歷代碼,跑起來總是差4天,修改之後也只能讓壹部分月份的顯示正確,代碼如下

java中,壹段萬年歷代碼,跑起來總是差4天,修改之後也只能讓壹部分月份的顯示正確,代碼如下

我改造了壹下妳的代碼 :

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 日歷

也是正確?

  • 上一篇:如何彌補均線的致命弱點
  • 下一篇:dnf70版本復古懷舊服70級復古dnf
  • copyright 2024編程學習大全網