我想任意输入年,月,日,然后判断输入的日期是星期几,要求是年月日都必须有合法验证,对于这里的验证怎么才能做到?如果输入错误就继续输入,不会退出。请高手指教!

解决方案 »

  1.   

    用C++写得~算法你可以参考#include <iostream>
    using namespace std;int main()
    {
    char *libai[]={"日", "一", "二", "三", "四", "五", "六"};
    int y, m, d, xingqi=1, run=0, total=0, runnum=0;
    cout<<"请输入日期(例如1981 5 21):";
    cin>>y>>m>>d;
    if (y%400==0 || (y%4==0 && y%100!=0)) run=1;
    if (y<1 || m<1 || m>12 || d<1) xingqi=0;
                                  /*xingqi变量为最后输出的结果,但如果输入了错误的时间就没
                                  有必要继续运行程序,这时用这个变量来判断是否满足要求!*/
    switch (m)
       {
       case 1 :     
       case 3 :
       case 5 :
       case 7 :
       case 8 :
       case 10:
       case 12: if (d>31) xingqi=0; break;
       case 2 : if (run==1 ? d>29 : d>28) xingqi=0; break;
       default: if (d>30) xingqi=0;
       }
    if (xingqi==0) { cout<<"输入错误,请重新运行程序\n"; return 0; }
    for (int i=1; i<y; i++) if (i%400==0 || (i%4==0 && i%100!=0)) runnum++;
    total=(y-1)*365+runnum;                     //此时的total为年份经过的天数!
    runnum=total;                               //runnum(作用完成),用来存放年份的天数!
    total+=(m-1)*30;                            
    for (i=1; i<m; i++)
       {
       switch (i)
          {
          case 1 :
          case 3 :
          case 5 :
          case 7 :
          case 8 :
          case 10:
          case 12: total++; break;
          case 2 : if (run) total--;
               else total-=2; break;
          }
       }                                        //此时的total为年份和月份一共经过的天数!
    total+=d;                                   //此时的total为总共经过的天数!
    xingqi=total%7;
    total-=runnum;                              //总天数-年所经过的天数=今年的天数!
    cout<<"\n您输入的日期是: 星期"<<libai[xingqi];
    cout<<"\n\n它是"<<y<<"年的第 "<<total<<" 天\n";
    return 0;
    }
      

  2.   

    在C++中这样写没什么问题,但在JAVA中,这样写容易出现输入多次的情况,或者是输入错误就退出的情况,小弟以前用C++写出过,但JAVA就出问题了
      

  3.   

    public static String getWeekDay(int year,int month,int date)
    {
    GregorianCalendar d=new GregorianCalendar();
        d.set(year,month,date);
        int m=d.get(Calendar.DAY_OF_WEEK);
        String str=null;
        switch(m)
        {
          case 1: str="星期天"; break;
          case 2: str="星期一"; break;
          case 3: str="星期二"; break;
          case 4: str="星期三"; break;
          case 5: str="星期四"; break;
          case 6: str="星期五"; break;
          case 7: str="星期六"; break;
          default: break;
        }
        return str;
    }
      

  4.   

    for (int i=1; i<y; i++) if (i%400==0 || (i%4==0 && i%100!=0)) runnum++;
    total=(y-1)*365+runnum;                     //此时的total为年份经过的天数!
    runnum=total;                               //runnum(作用完成),用来存放年份的天数!
    total+=(m-1)*30;                            
    for (i=1; i<m; i++)
       {
       switch (i)
          {
          case 1 :
          case 3 :
          case 5 :
          case 7 :
          case 8 :
          case 10:
          case 12: total++; break;
          case 2 : if (run) total--;
               else total-=2; break;
          }
       }                                        //此时的total为年份和月份一共经过的天数!
    total+=d;                                   //此时的total为总共经过的天数!
    xingqi=total%7;
    total-=runnum;                              ///这些地方不是很理解?能给讲一下吗?
      

  5.   

    tomison()的程序小弟不知道该如何运行,望指教!