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 }