哪位高手帮我看看这个万年历的算法哪里错了啊 看了很久就是看不出来 
还有就是遇到星期日自动换行的问题 如果1号是星期日怎么实现换行啊》?
import java.util.Scanner;public class MyCalendar {
 int year;//输入的年份
 int month;//输入的月份
    int sum;//距离1900-1-1的天数
int thisyearday ;//输入的该年元旦至该月初的天数
int days;//输入的月份的天数
public MyCalendar() {
System.out.println("******************欢 迎 使 用 万 年 历******************");
Scanner input = new Scanner(System.in);
System.out.print("\n请选择年份: ");
year = input.nextInt();
System.out.print("\n请选择月份: ");
 month = input.nextInt();
System.out.println();
sumDay();
thisYearDay();
printCalendar(month);
 thisYearDay();
}

//判断是否闰年  判断年份是非闰年年还是闰年 闰年366  非闰年365
    public  void thisYearDay(){
     for(int i=1;i<=month;i++){
switch (i) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
days=31;
break;
case 2:
if((year%4==0&&year%100!=0)||(year%400==0)){
days=29;
}else{
days=28;
}
break;
default:days=30;
}
if(i<month){
sum=sum+days;
}

    }
   
        }
//距离1900年1月1日所差天数
public  void sumDay(){ int leap=0; int nonleap=0;
for(int i=1900;i<year;i++){
//判断是否闰年 
if((year%4==0&&year%100!=0)||(year%400==0)){
sum=sum+366;
}
else{
sum=sum+365;
}
}
} public void printCalendar(int m) {
int a;
a=sum%7;
System.out.println(a);
System.out.println("星期日\t星期一\t星期二\t星期三\t星期四\t星期五\t星期六\t"); for(int i=0;i<a;i++){
System.out.print("\t");
} for(int j=1;j<=days;j++){
System.out.print(j+"\t");

if((j+a)%7==0){
System.out.println();
}
else if(a%7==0){
// System.out.println(); }
}
}

/**
 * @param args
 */
public static void main(String[] args) {
new MyCalendar();
}}

解决方案 »

  1.   

    用蔡勒函数。
    public class Calendar {

    /**
     * 计算year年month月day日是星期几---蔡勒函数
     * @param year
     * @param month
     * @param day
     * @return
     */
    public static int  weekDay(int year,int month,int day)
    {
    if(month==1) month=13;
    if(month==2) month=14;
    int week=(day+2*month+3*(month+1)/5+year+year/4-year/100+year/400)%7;
    return week+1;
    }
    /**
     * 打印出日历
     * @param year
     * @param month
     */
    public static void calendar(int year,int month)
    {
    //得到该年该月第一天的星期
    int nowDay=weekDay(year,month,1);
    //判断该年该月的天数
    int dayNumber=dayNumber(year,month);
    //打印表头
    System.out.println("一\t二\t三\t四\t五\t六\t日\t");

    //前面空几格【空格数目就是星期几】
    for(int i=1;i<nowDay;i++)
    System.out.print("\t");

    //打印出日期
    for(int i=1;i<=dayNumber;i++)
    {
    System.out.print(i+"\t");
    //每隔7天就换一行
    if((i+nowDay-1)%7==0)
    System.out.println();
    }
    }
    /**
     * 判断year年month月是多少天
     * @param year
     * @param month
     * @return
     */
    public static int dayNumber(int year,int month)
    {
    //闰年的月份天数
    int []runYear={0,31,29,31,30,31,30,31,31,30,31,30,31};
    //平年的月份天数
    int []pingYear={0,31,28,31,30,31,30,31,31,30,31,30,31};
    //如果为闰年
    if(leapYear(year))
    {
    return runYear[month];
    }
    else 
    return pingYear[month];
    }
    /**
     * 判断是否为闰年,如果为闰年就返回一个真值
     * @param year
     * @return
     */
    public static boolean leapYear(int year)
    {
    boolean bool=false;
    //闰年判断方法 4年一润 100年不润 400年润 3200年不润
    if( ( year %4 == 0 && year %100 != 0)  || (year % 400 == 0))
    bool=true;

    return bool;
    }
    /**
     * @param args
     */
    public static void main(String[] args) {
    // TODO Auto-generated method stub
    Calendar.calendar(2010, 6);

    }
    }
      

  2.   

    用Calendar 类 ,全部就能搞定,何必自己写 闰年判断,天数统计呢。