Java基本语法_循环练习系列(二)——万年历

写万年历大致可以分为以下几个步骤:

1.根据用户输入的年份判断该年是否是闰年。

2.根据用户输入的月份计算该月的天数。

3.计算输入的年份之前的总天数。

4.计算输入的月份之前的天数。

5.计算该月的第一天是星期几,然后输出日历。

将这个大工程分为这几步就简单多了,可以很好的学习循环语句哦。

 1 public class Test4 {
 2 
 3     /**
 4      * @param args
 5      */
 6     public static void main(String[] args) {
 7         // TODO Auto-generated method stub
 8         System.out.println("------万年历------");
 9         System.out.print("请输入要查询的年份:");
10         Scanner input=new Scanner(System.in);
11         int year=input.nextInt();
12         boolean runNian;
13         int totalDays=0;
14         int days=0;
15         
16         //判断改年为闰年还是平年
17         if((year%4==0&&year%100!=0)||year%400==0){
18             runNian=true;
19         }else{
20             runNian=false;
21         }
22         if(runNian){
23             System.out.println(year+"年是闰年");
24         }else{
25             System.out.println(year+"年是平年");
26         }
27         //计算该年之前一共的天数(从公元1年开始到输入年份前一年)
28         for(int i=1;i<year;i++){
29             if((i%4==0&&i%100!=0)||i%400==0){
30                 totalDays+=366;
31             }else{
32                 totalDays+=365;
33             }
34         }
35         System.out.println(year+"年之前一共有"+totalDays+"天");
36         //判断输入的月份有多少天,并且计算该月之前一共的天数
37         System.out.print("请输入要查询的月份:");
38         int month=input.nextInt();
39         int beforeDays=0;
40         int i=1;
41         do{
42             switch(i){
43             case 1:
44             case 3:
45             case 5:
46             case 7:
47             case 8:
48             case 10:
49             case 12:days=31;break;
50             case 2:
51                 if(runNian){
52                     days=29;
53                 }else{
54                     days=28;
55                 }
56                 break;
57             default:
58                 days=30;
59             break;
60             }
61             if(i<month){
62                 beforeDays=beforeDays+days;
63             }
64             i++;
65             
66         }while(i<=month);
67             totalDays+=beforeDays;
68             System.out.println(year+"年"+month+"月之前一共有"+beforeDays+"天");
69             System.out.println("该月有"+days+"天");
70             //输出日历,0代表星期日,1~6分别代表星期一到星期六(重点,以后注意看,这段是我写时卡克的地方)
71             System.out.println("星期日\t星期一\t星期二\t星期三\t星期四\t星期五\t星期六");
72             int s=(totalDays+1)%7;
73             //输出空格
74             for(int nulNum=0;nulNum<s;nulNum++){
75                 System.out.print("\t");
76             }
77             //在输完空格的位置上输出本月的日历
78             for(int j=1;j<=days;j++){
79                 //该月第一天之前要输出的空格数,如果是星期五,前面输出5个空格
80                 System.out.print(j+"\t");
81                 if((totalDays+j)%7==6){
82                     System.out.println();
83                 }
84             }
85             
86         
87     }
88 
89 }

 

posted on 2015-12-18 22:54  深海溺心  阅读(243)  评论(0编辑  收藏  举报

导航