萬年歷(二),萬年歷
根據if與for編寫萬年歷程序
上一篇中有判斷年月的天數,這一篇中有幾個要點
①計算1900年1月1日之前的總天數
②計算輸入月份的天數(比如輸入5,應計算1-4月的總天數)
③星期幾計算:1+總天數%7 \t
④每行輸入7個
完成萬年歷完整代碼如下

![]()
1 import java.util.Scanner;
2 public class Calendars{
3 public static void main(String []argas)
4 {
5 Scanner input=new Scanner(System.in);
6 int year;//年份
7 int month;//月份
8 int days=0;//天
9 boolean isRn;//用於判斷是否是閏年,true為閏年,false為平年
10 int totalDays=0;
11 System.out.println("******************使用萬年歷******************");
12 System.out.println("請輸入年份");
13 year=input.nextInt();
14 System.out.println("請輸入月份");
15 month=input.nextInt();
16 //判斷是否是閏年
17 if((year%400==0)||(year%4==0&&year%100!=0))
18 {
19 isRn=true;
20 System.out.println(year+"年是閏年");
21 }
22 else
23 {
24 isRn=false;
25 System.out.println(year+"年是平年");
26 }
27 //計算年的總天數
28 for(int i=1900;i<year;i++)
29 {
30 if((i%400==0)||(i%4==0&&i%100!=0))
31 {
32 totalDays+=366;
33 }
34 else
35 {
36 totalDays+=365;
37 }
38 }
39 //計算輸入月份之前的天數之和
40 for(int i=1;i<=month;i++)
41 {
42 switch(i)
43 {
44 case 1:
45 case 3:
46 case 5:
47 case 7:
48 case 8:
49 case 10:
50 case 12:
51 days=31;
52 break;
53 case 2:
54 if(isRn)
55 {
56 days=29;
57 }
58 else
59 {
60 days=28;
61 }
62 break;
63 case 4:
64 case 6:
65 case 9:
66 case 11:
67 days=30;
68 break;
69 default:
70 System.out.print("輸入的月份有誤");
71 break;
72 }
73 //輸入月的天數保存到days中,但不累加
74 if(i!=month)
75 {
76 totalDays+=days;
77 }
78 }
79
80 //求出星期幾,就是前面\t的個數
81 int beforeDays;
82 beforeDays=1+totalDays%7;
83 if(beforeDays==7)
84 {
85 beforeDays=0;//代表星期天,0個\t
86 }
87 System.out.println("星期天\t星期一\t星期二\t星期三\t星期四\t星期五\t星期六");
88 //先打印\t
89 for(int i=0;i<beforeDays;i++)
90 {
91 System.out.print("\t");
92 }
93
94 for(int i=1;i<=days;i++)
95 {
96 System.out.print(i+"\t");
97 //滿7個換行
98 if((i+beforeDays)%7==0)
99 {
100 System.out.println();
101 }
102 }
103
104 //System.out.print(year+"年"+month+"月共有"+days+"天");
105
106 }
107 }
View Code