请教各位高手帮我这个新人解决一个程序问题!
我想任意输入年,月,日,然后判断输入的日期是星期几,要求是年月日都必须有合法验证,对于这里的验证怎么才能做到?如果输入错误就继续输入,不会退出。请高手指教! 问题点数:20、回复次数:5Top
1 楼qfll_1981(清风寥寥)回复于 2006-05-02 09:42:47 得分 0
用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;
}Top
2 楼gk79166045()回复于 2006-05-02 09:50:20 得分 0
在C++中这样写没什么问题,但在JAVA中,这样写容易出现输入多次的情况,或者是输入错误就退出的情况,小弟以前用C++写出过,但JAVA就出问题了Top
3 楼tomison()回复于 2006-05-02 14:08:21 得分 0
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;
}Top
4 楼davidong369(冬野)回复于 2006-05-02 21:32:15 得分 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; /
//这些地方不是很理解?能给讲一下吗?
Top
5 楼davidong369(冬野)回复于 2006-05-02 21:47:35 得分 0
tomison()的程序小弟不知道该如何运行,望指教!Top




