日期:2014-05-20  浏览次数:20685 次

新手写的日历表,从键盘输入年份和月份然后打印这个月的日历
虽然这个日历表是我自己写的,但是里面有一处逻辑我还是不懂,能正确运行时初次运行后根据错误改的,不懂的那个地方里面已经特别标注了,还望前辈能指点一二。代码如下(没有数据库,复制粘贴到eclipse下就能直接运行):

import java.util.Scanner;


public class Daqing7 {

/**
* @param args
*/
public static void main(String[] args) {
int i=0;
int day=0,day1=0,day2=0,day3=0,day4=0,day5=0;
int mon1=31;
int mon2=0;
// TODO Auto-generated method stub
Scanner input=new Scanner(System.in);
System.out.println("请输入年份:");
int year=input.nextInt();
System.out.println("请输入月份:");
int mon=input.nextInt();
  for(int year1=1900;year1<year;year1++)
  {
  if((year1%4==0&&year1%100!=0)||year1%400==0)//判断是不是闰年
  {
  day=366;//是闰年这一年有366天
  }
  else
  day=365;//不是闰年有365天
  day1=day1+day;//累加 1900年到你输入的年份的前一年有多少天,譬如你输入1902年,这个天数就是1900年和1901年的天数
  }
  for(mon1=0;mon1<mon;mon1++)
 
  {
  mon2=mon1+1;
  switch(mon2)
  {
  case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:day5=31;
break;
case 4:
case 6:
case 9:
case 11:day5=30;
break;
case 2:
if((year%4==0&&year%100!=0)||year%400==0)
{
day5=29;
}
else
day5=28;
break;
default:break;
 
  }
  // for(mon1=0;mon1<mon;mon1++)
  switch(mon1)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:day4=31;
break;
case 4:
case 6:
case 9:
case 11:day4=30;
break;
case 2:
if((year%4==0&&year%100!=0)||year%400==0)
{
day4=29;
}
else
day4=28;
break;
default:break;
}
day2+=day4;//累加你输入的那一年中你输入的月份之前几个月的天数;
  }
  day3=day1+day2;//计算1900年一月一号到你输入的那一年(那一月之前)的天数;
  System.out.println("你输入的这个月距离1900年"+day3+"天");
i=(day3+1)%7;//得到你输入的那个月的一号对应星期几;
System.out.println("你输入的这个月的第一天对应星期:"+i);
System.out.println("日\t一\t二\t三\t四\t五\t六");
for(int j=1;j<=i;j++)
{
System.out.print("\t");//打印空格,日期的第一行对应星期几就打印及格空格;
}

for(int k=1;k<=(7-i);k++)//打印日期的第一行,7-i是限制第一行打印从1到几;
{
System.out.print(k+"\t");
}
System.out.println();//第一行打印结束,打印换行;
int p=7-i;

for(int m=8-i;m<=day5;m++)//(8-i)指第二行的第一个数字是几;
/******************************************************************************
* *******************************************************************************
* *******************************************************************************
* *******************************************************************************
* *******************************************************************************
这里用day5而不用day4是我运行后试出来的,到现在我也弄不懂这里的逻辑,有没有高手解答下
*******************************************************************************
*******************************************************************************
********************************************************************************
********************************************************************************
********************************************************************************
*/
{
System.out.print(m+"\t");//打印的是第二行和第二行以后的剩余的天;
for(int n=1;n<=4;n++)//因为从第二行往后,最多还有五行可打印,只需要打印四行换行,所以n<=4;