java基礎學
阿新 • • 發佈:2018-12-06
java基礎之列印萬年曆
問題
輸入年,月打印出萬年曆.
例如:
問題分析
1.計算出1月是星期幾,利用(基姆拉爾森計算公式)
2.計算出本月有多少天.
3.列印日曆
程式碼實現
1.直接打印出輸入的年和月
2.打印出星期
3.計算1號是周幾
4.計算本月的天數
5.列印主體
5.1 週日不需要空格,星期一空1格,星期2空2格,類推.
5.2 周6需要換行
具體程式碼
import java.util.Scanner; public class calendar { public static void main(String[] args) { Scanner input = new Scanner(System.in) ; System.out.println("請輸入年份:"); int year = input.nextInt(); System.out.println("請輸入月份:"); int month = input.nextInt(); //列印標題 System.out.println(year+" 年 "+month+" 月 "); String[] st1= {"日","一","二","三","四","五","六"}; for(int i=0;i<st1.length ;i++) { System.out.printf("%-16s",st1[i]); //-是略對齊 } System.out.println(); // printTitle(year,month); /* * 列印主體 * 本月1號是星期幾,星期1前空一位,星期2空2位,星期天不空 * 計算本月天數 * 從1開始打印出來 * 判斷是否為7的倍數,是7的倍數就需要換行,不是7的倍數直接列印 */ print(getWeekOfMonth(year,month),year,month); } //主體打印出 //num1 代表本月1號是星期幾,num2代表年,num3代表月 public static void print(int num1,int num2,int num3) { for(int i=1;i<=num1;i++) { if(i==7) { //星期日不空 continue; }else { //1-6需要空格 String s1 =" " ; System.out.printf("%-8s",s1); //-是略對齊 } } for(int i=num1+1,j=1;i<getDayOfMonth(num2,num3)+num1+1;i++,j++) { //i可以從零開始,當num1=6的時候是需要換行的,所以要num1+1 if(i%7==0) { System.out.printf("%-8d\n",j); }else { System.out.printf("%-8d",j); } } } //計算1月是星期幾 /** * 獲取某個月第一天是周幾(基姆拉爾森計算公式) * * @param year * 年 * @param month * 月 * * @return */ private static int getWeekOfMonth(int year, int month) { if (month == 1 || month == 2) { month += 12; year--; } return (1 + 2 * month + 3 * (month + 1) / 5 + year + year / 4 - year / 100 + year / 400 + 1) % 7; } //計算本月有多少天 /** * 求當前月共有多少天 * * @param year * 年 * @param month * 月 * @return */ private static int getDayOfMonth(int year, int month) { if (month == 4 || month == 6 || month == 9 || month == 11) { return 30; } else if (month == 2) { if ((year % 400 == 0) || (year % 4 == 0 && year % 100 != 0)) { return 29; } return 28; } else { return 31; } } }