首先,输出的日历不准确,今天是22号星期五,可是
*********欢迎使用万年历查询时间*********请输入年份:2010
2010是平年请输入月份:10
星期天 星期一 星期二 星期三 星期四 星期五 星期六 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
Process completed.然后1900年是星期几,我也不确定,所以几处不明白,红线部分。最后,在JCreator中,怎样让星期和日期格式对好,上面复制的没问题,但在J中
不是这样的。 耐心看看,感激不尽!!!附代码
import java.util.*;
public class Calendar {
      public static void main (String[] args) {
         int years,months,day_1,day_2,sum_1,sum_2,sum,firstDay;
         boolean  testYear;
         System.out.print("\n");
         System.out.print("*********欢迎使用万年历查询时间*********");
         System.out.println ("\n");
         System.out.print("请输入年份:");
         Scanner input=new Scanner(System.in);
         years=input.nextInt();
         day_1=0;
         day_2=0;
         sum_1=0;
         sum_2=0;
         sum=0;
         firstDay=0;
         if((years%4==0&&years%100!=0)||years%400==0)
          {
           System.out.println ("\t"+years+"是闰年");
           testYear=true;
          }
         else{
            System.out.println ("\t"+years+"是平年");
            testYear=false;
            }
         for(int i=1900;i<years;i++)
          {
           if((i%4==0&&i%100!=0)||i%400==0)
           {
            day_1=366;
           }
           else
           {
            day_1=365;
           }
          sum_1=sum_1+day_1;  //计算从输入年份1月1号到1900年1月1号总天数
          }
          System.out.println ();
          System.out.print("请输入月份:");
          months=input.nextInt();
          /*
           *计算输入的月份到该年份的天数
          */
            for(int j=1;j<months;j++)
            {
                if(j==2)
                 {
              if(testYear=true)
              {
              sum_2=29+sum_2;
                  }
              else{
                  sum_2=28+sum_2;
                  }
                 }
                else if((j==4)||(j==6)||(j==9)||(j==11))
               {
               sum_2=30+sum_2;
                 }
                else
                 {
               sum_2=31+sum_2;
              }
            }
             if(months==2)
              {
               if(testYear)
                {
              day_2=29;
              }
               else
                {
               day_2=28;
              }
              }
             else if((months==4)||(months==6)||(months==9)||(months==11))
              {
               day_2=30;
              }
             else
              {
               day_2=31;
              }
             sum=sum_1+sum_2;  //累加记录距离1900年1月1号的天数
             System.out.print("\n\n");
             System.out.println ("星期天"+"\t星期一"+"\t星期二"+"\t星期三"+"\t星期四"+
             "\t星期五"+"\t星期六"+"\n");
            int temp=1+sum%7;  //计算该月份的第一天是星期几
            /**周一-周六:使用数字1-6表示,周日用0表示*/
             if(temp==7)
             {
              firstDay=0;
             }
             else{
              firstDay=temp;
             }
            for(int nullNo=0;nullNo<firstDay;nullNo++)
             {
              System.out.print("\t");  //循环输出第一行的空格
             }
            for(int x=1;x<=day_2;x++)
             {
              System.out.print(x+"\t");
              if((sum+x-1)%7==5)
             {
              System.out.print("\n");//判断当前日x是否是周六,如果是,换行
             }
             }
         }
}

解决方案 »

  1.   

    干嘛不用Calendar类啊,还自己算天数,晕
    第一处红色的地方有问题吧,sum是距离1900年1月1日的天数,当天是星期几要考虑的,除非当天是星期天
      

  2.   

    判断第一天是星期几那里出错了,应该改为:int temp = sum % 7; // 计算该月份的第一天是星期几
    然后修改一下显示就没问题了
      

  3.   

    当然还要改这里:/** 周一-周六:使用数字1-6表示,周日用0表示 */
    if (temp == 0) {
    firstDay = 0;
    } else {
    firstDay = temp;
    }
      

  4.   

    我对书上的代码很无言,这还是我改过的。
    1900一月一号星期几,这很重要。
    Calendar类我了解,只是我想按书上的要求来。
      

  5.   

    自己写了一个,lz参考一下:import java.util.Scanner;class Date{
    public int isleap(int y){
    return( (y%4==0&&y%100!=0||y%400==0)?1:0 );
    }
    public  int per_year_day_week(int y){
    return( (y+y/4-y/100+y/400)%7 );
    }
    public int per_month(int y,int m){
    int month_every_day[][]={{31,28,31,30,31,30,31,31,30,31,30,31},
    {31,29,31,30,31,30,31,31,30,31,30,31}};
    return month_every_day[isleap(y)][m-1];
    }
    public  String eglish_month(int i){
    String[] str = {"January","February","March","Aril","May","June",
    "July","August","September","October","November","December"};
    return str[i];
    }
    }public class Calendar {
    public static void main(String[] args) {
    Date date = new Date();
    int i,day,year,weekday;
    Scanner scan =new Scanner(System.in);
    System.out.print("Please input a year:");
    year = scan.nextInt();
    System.out.println("\n\t\t"+year+"年日历如下:");
    weekday = date.per_year_day_week(year);
    for (i=1;i<=12;i++){
    System.out.print("\n"+date.eglish_month(i-1)+"-"+year);
    System.out.println("\n---------------------------------------------------");
    System.out.println("Sun\tMon\tTue\tWed\tThu\tFri\tSat");
    for (day=0;day<weekday;day++){
    System.out.print("\t");
    }
    for (day=1;day<=date.per_month(year,i);day++){
    System.out.print(day+"\t");
    weekday = (weekday+1)%7;
    if(weekday==0){
    System.out.println("");
    }
    }
    System.out.println("\n---------------------------------------------------");
    }
    }
    }
    ////////////////////////////////////////////////////////////////////
    October-2010
    ---------------------------------------------------
    Sun Mon Tue Wed Thu Fri Sat
    1 2
    3 4 5 6 7 8 9
    10 11 12 13 14 15 16
    17 18 19 20 21 22 23
    24 25 26 27 28 29 30
    31
    ---------------------------------------------------
      

  6.   

    为什么输出变型了呢?再试一下、、、October-2010
    ---------------------------------------------------
    Sun Mon Tue Wed Thu Fri Sat
    1 2
    3 4 5 6 7 8 9
    10 11 12 13 14 15 16
    17 18 19 20 21 22 23
    24 25 26 27 28 29 30
    31
    ---------------------------------------------------
      

  7.   

    1900年1月一号是星期一,所以这里没问题 :int temp=1+sum%7; //计算该月份的第一天是星期几
    但就是跟实际的天数晚一天。
    怎么办
    import java.util.*;
    public class Calendar {
          public static void main (String[] args) {
             int years,months,day_1,day_2,sum_1,sum_2,sum,firstDay;
             boolean  testYear;
             System.out.print("\n");
             System.out.print("*********欢迎使用万年历查询时间*********");
             System.out.println ("\n");
             System.out.print("请输入年份:");
             Scanner input=new Scanner(System.in);
             years=input.nextInt();
             day_1=0;
             day_2=0;
             sum_1=0;
             sum_2=0;
             sum=0;
             firstDay=0;
             if(((years%4==0)&&(years%100!=0))||(years%400==0))
              {
               System.out.println ("\t"+years+"是闰年");
               testYear=true;
              }
             else{
                System.out.println ("\t"+years+"是平年");
                testYear=false;
                }
             for(int i=1900;i<years;i++)
              {
               if(((i%4==0)&&(i%100!=0))||(i%400==0))
               {
                day_1=366;
               }
               else
               {
                day_1=365;
               }
              sum_1=sum_1+day_1;  //计算从输入年份1月1号到1900年1月1号总天数
              }
              System.out.print("\n");
              System.out.print("请输入月份:");
              months=input.nextInt();
              /*
               *计算输入的月份到该年份的天数
              */
                for(int j=1;j<months;j++)
                {
                    if(j==2)
                     {
                  if(testYear=true)
                  {
                  sum_2=29+sum_2;
                      }
                  else{
                      sum_2=28+sum_2;
                      }
                     }
                    else if((j==4)||(j==6)||(j==9)||(j==11))
                   {
                   sum_2=30+sum_2;
                     }
                    else
                     {
                   sum_2=31+sum_2;
                  }
                }
                 if(months==2)
                  {
                   if(testYear)
                    {
                  day_2=29;
                  }
                   else
                    {
                   day_2=28;
                  }
                  }
                 else if((months==4)||(months==6)||(months==9)||(months==11))
                  {
                   day_2=30;
                  }
                 else
                  {
                   day_2=31;
                  }
                 sum=sum_1+sum_2;
                 //累加记录距离1900年1月1号的天数
                 System.out.print("\n\n");
                 System.out.println ("星期天"+"\t星期一"+"\t星期二"+"\t星期三"+"\t星期四"+
                 "\t星期五"+"\t星期六"+"\n");
                int temp=1+sum%7;  //计算该月份的第一天是星期几,1990年1月1号是星期一
                /**周一-周六:使用数字1-6表示,周日用0表示*/
                 if(temp==7)
                 {
                  firstDay=0;
                 }
                 else{
                  firstDay=temp;
                 }
                for(int nullNo=0;nullNo<firstDay;nullNo++)
                 {
                  System.out.print("\t");  //循环输出第一行的空格
                 }
                for(int x=1;x<=day_2;x++)
                 {
                  System.out.print(x+"\t");
                  if((sum+x-1)%7==5)
                 {
                  System.out.print("\n");//判断当前日x是否是周六,如果是,换行
                 }
                 }
             }
    }
      

  8.   

    刚写的:代码如下:(没有调用Calendar类)
    import java.util.Scanner;
    class FunctionDate{
    int[][] days = {{31,28,31,30,31,30,31,31,30,31,30,31},
    {31,29,31,30,31,30,31,31,30,31,30,31}};
    //判断是否是闰年
    int is_leap_year(int y){
    return( (y%4==0&&y%100!=0||y%400==0)?1:0 );
    }
    //某月共有多少天
    int every_month_days(int y,int m){
    return days[is_leap_year(y)][m-1];
    }
    //某年的某个月的第一天是星期几
    int empty_year(int y,int m){
    int emptys = 1;//当天算在内,故初值为1
    for (int i = 0; i < m-1; i++) {
    emptys += days[is_leap_year(y)][i];
    }
    emptys += (y-1)+(y-1)/4-(y-1)/100+(y-1)/400;
    return emptys%7;
    }
    }
    public class NewCalendar {
    public static void main(String[] args){
    int year = 0,month = 0;
    int empty = 0,isleap = 0; FunctionDate  fd = new FunctionDate();
    Scanner sacn = new Scanner(System.in);
    //输入年份
    System.out.println("please input a year;");
    year = sacn.nextInt();
    //输入月份
    System.out.println("please input a month;");
    month = sacn.nextInt();
    //打印某年某月日历
    System.out.println("\t\t\t"+month+"-"+year);
    System.out.println("\n=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=");
    System.out.println("星期天\t"+"星期一\t"+"星期二\t"+
    "星期三\t"+"星期四\t"+"星期五\t"+"星期六\t");
    empty = fd.empty_year(year, month);
    for (int i = 0; i < empty; i++) {
    System.out.print("\t");
    }
    for (int i = 1; i <= fd.every_month_days(year, month); i++) {
    System.out.print(i+"\t");
    empty = (empty + 1)%7;
    if(empty == 0)
    System.out.println("");
    }
    System.out.println("\n=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=");
    }
    }