java - 数组循环意外停止
PHP中文网
PHP中文网 2017-04-18 10:03:21
0
1
437

在试图用代码实现时间戳转换为标准时间(作业)。在实现getMonth方法的时候,希望把剩余天数用数组月份遍历的时候依次减出来,代码如下:

public class TimeStamp {
public long getYear()
{
    return (int)(System.currentTimeMillis()/(1461*24*3600d*1000)*4+1970);
}
public double getMonth() {
    //用总天数day-已经过去年份的天数,然后减去每个月的天数,挨个月份遍历
    //先求天数:
    double day =(long) (System.currentTimeMillis() / (24 * 3600d*1000));
    int passDays = 0;
    int[] rMonth = new int[]{31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};//闰年月天数
    int[] pMonth = new int[]{31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};//平年月天数
    for (int c = 1970; c < getYear(); c++)//计算天数循环,到2015年整个结束共计的天数
    {
        int a = 365;
        if (c % 4 == 0)
            a = 366;
        passDays = passDays + a;//总计从时间戳开始过去的天数
    }
    double leftDays=0;//完整年减去后剩下的天数
    leftDays=System.currentTimeMillis()/(24*3600d*1000)-passDays;
    leftDays=(int)leftDays;//剩下的天数返回的是对的===========================================================
    //=======================================================
    //创造一个for循环一个月一个月的遍历减去天数
    for(int i=0;i<=11;i++)
    {
        if (getYear()%4==0)
            day=leftDays-rMonth[i];
        if (getYear()%4!=0)
            day = leftDays - pMonth[i];
        if (day<=0)
            break;
    }
    return day/*由于此处未正确实现,仅先作为一个返回值测试点用*/;
}
            public static void main(String args[])
            {
                TimeStamp time=new TimeStamp();
                System.out.println(time.getMonth());
            }
            }

一部分代码如上,运行后直到返回的leftDays的值都是对的,到了getMonth方法的循环之后,dayDate返回的数值可以看出只执行了一次循环,这是什么问题?

PHP中文网
PHP中文网

认证高级PHP讲师

모든 응답(1)
巴扎黑

그 이유는 각 루프에서 하나의 변수 day만 작동하고 leftDays 변수를 작동하는 것을 잊었기 때문입니다. 이로 인해 각 루프가 날짜를 다시 계산하는 것과 동일해지기 때문에 쓸모가 없습니다. . . 문제 해결

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿