根据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 }