CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Java >  J2SE / 基础类

请教各位高手帮我这个新人解决一个程序问题!

楼主gk79166045()2006-05-02 09:38:37 在 Java / J2SE / 基础类 提问

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

相关问题

关键词

得分解答快速导航

  • 帖主:gk79166045

相关链接

  • CSDN Java频道
  • Java类图书
  • Java类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo