| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2796 人关注过本帖
标题:初学者,请帮看程序并优化,虽然实现了计算两个日期之间的天数,但是感觉总 ...
只看楼主 加入收藏
ujquan
Rank: 2
等 级:论坛游民
帖 子:62
专家分:42
注 册:2011-12-26
结帖率:33.33%
收藏
已结贴  问题点数:20 回复次数:8 
初学者,请帮看程序并优化,虽然实现了计算两个日期之间的天数,但是感觉总有问题。
import java.util.Scanner;
class JiSuanTianShu//计算年份1到年份2之间的天数
{
    public static void main (String [] args){
    Scanner s = new Scanner(System.in);
    System.out.print("请输入起始年:");
    int y1 = s.nextInt();
    System.out.print("请输入始年月:");
    int m1 = s.nextInt();
    System.out.print("请输入始年日:");
    int d1 = s.nextInt();
    System.out.print("请输入截止年:");
    int y2 = s.nextInt();
    System.out.print("请输入截止月:");
    int m2 = s.nextInt();
    System.out.print("请输入截止日:");
    int d2 = s.nextInt();
    int sum = 0 ;
    int sum1 = 0;
    int sum2 = 0;
    int sum3 = 0;
    if(y1<y2)//判断起止年
   {  
//计算起止年之间整年的天数   
      for(int i= y1+1 ; i<y2 ;i++){
          if(i%4==0&&i%100==00||i%400==0)
           { sum3 = sum3 + 366;
          System.out.println(i+"年"+sum3+"天");}
          else
            {sum3 = sum3 + 365;
            System.out.println(i+"年"+sum3+"天");}
       }
//计算起始年剩余的天数。
       switch(m1){
        case 1:
           sum1 = sum1+31;
        case 2:
          if(y1%4==0&&y1%100!=0||y1%400==0)
           sum1 = sum1+29;
          else
           sum1 = sum1+28;
        case 3:
           sum1 = sum1+31;
        case  4:
           sum1 = sum1+30;
        case  5:
           sum1 = sum1+31;
        case 6 :
           sum1 = sum1+30;      
        case 7:
           sum1 = sum1+31;
        case  8:
           sum1 = sum1+31;   
        case 9:
           sum1 = sum1+30;     
        case 10:
           sum1 = sum1+31;
        case 11:
           sum1 = sum1+30;
        case 12 :
           sum1 = sum1+31;
      
       }
         sum1 = sum1-d1;  
         System.out.println(y1+"年"+m1+"月"+d1+"日"+"之后"+y1+"年还剩余"+sum1+"天");
//计算截止年月日之前的天数。
       switch(m2-1){
         case 11:
           sum2 = sum2+30;
         case 10:
           sum2 = sum2+31;
         case 9:
           sum2 = sum2+30;
         case  8:
           sum2 = sum2+31;
         case 7:
           sum2 = sum2+31;
         case 6 :
           sum2 = sum2+30;
         case  5:
           sum2 = sum2+31;
         case  4:
           sum2 = sum2+30;
         case 3:
           sum2 = sum2+31;
         case 2:
           { if(y1%4==0&&y1%100!=0||y1%400==0)
               sum2 = sum2+29;
             else
               sum2 = sum2+28;
            }
         case 1 :
           sum2 = sum2+31;
        }
           sum2 = sum2+d2;
            System.out.println(y2+"年"+m2+"月"+d2+"日是"+y2+"年的第"+sum2+"天。");
     sum = sum1 +sum2+sum3;
     System.out.println(y1+"年"+m1+"月"+d1+"日"+"到"+y2+"年"+m2+"月"+d2+"日有"+sum+"天。");
    }else if(y1==y2)//同年则要判断是否月份大小以及日期大小
       {
          if(m1<=m2&&d1<=d2)
            {
              sum = sum1+d2-d1;     
              System.out.println(y1+"年"+m1+"月"+d1+"日"+"到"+y2+"年"+m2+"月"+d2+"日有"+sum+"天。");
           }else  if(d1>d2){
              System.out.println("起止日期输入错误!");

           }else
              System.out.println("起止月份输入错误!");

       }else
          System.out.println("起止年份输入错误!");
}
}
搜索更多相关主题的帖子: public import 
2016-02-28 09:17
ujquan
Rank: 2
等 级:论坛游民
帖 子:62
专家分:42
注 册:2011-12-26
收藏
得分:0 
总感觉计算机的执行顺序有问题,尤其是年份相等分支时。
2016-02-28 09:27
诸葛欧阳
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:流年
等 级:贵宾
威 望:82
帖 子:2790
专家分:14619
注 册:2014-10-16
收藏
得分:7 
计算没这么麻烦吧

一片落叶掉进了回忆的流年。
2016-02-28 22:56
ujquan
Rank: 2
等 级:论坛游民
帖 子:62
专家分:42
注 册:2011-12-26
收藏
得分:0 
回复 3楼 诸葛欧阳
请教如何优化????
请指点一下!谢谢!!
2016-03-01 14:26
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:7 
c语言里有个关于time 的 tm结构体  不知道java里是否有

DO IT YOURSELF !
2016-03-01 14:39
ujquan
Rank: 2
等 级:论坛游民
帖 子:62
专家分:42
注 册:2011-12-26
收藏
得分:0 
不用time函数之类,纯循环和分支结构编写。
2016-03-01 14:58
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
这样写看起来有些乱  适当的使用函数 会好一些   比如 计算某年是365天还是366天  计算X年x月x日是一年的第几天  分别单独写一个函数

DO IT YOURSELF !
2016-03-01 15:18
诸葛欧阳
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:流年
等 级:贵宾
威 望:82
帖 子:2790
专家分:14619
注 册:2014-10-16
收藏
得分:0 
把各月天数放进数组,平年闰年另外计算

一片落叶掉进了回忆的流年。
2016-03-01 17:59
jinjoxie
Rank: 2
等 级:论坛游民
威 望:1
帖 子:19
专家分:61
注 册:2015-6-3
收藏
得分:7 
这么简单的问题,何必把它复杂化呢?
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日");
int year1 = 2011, month1 = 1, date1 = 23;
int year2 = 2016, month2 = 1, date2 = 26;
        
Date d = new Date(year1 - 1900, month1 - 1, date1) {};
Date d2 = new Date(year2 - 1900, month2 - 1, date2) {};
int days = (int)((d2.getTime() - d.getTime()) / 3600000 / 24);
System.out.println(sdf.format(d)+" 到 " + sdf.format(d2) +" 相差 " + days+ " 天.");

[此贴子已经被作者于2016-3-2 11:59编辑过]

2016-03-02 11:58
快速回复:初学者,请帮看程序并优化,虽然实现了计算两个日期之间的天数,但是感 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.027728 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved