0

これは、日数の差を計算するために使用しているコードです。「n」値をカウントとして使用するものと考えてください。この後、n%7 を使用し、その残りを使用して 1 日を取得します。私が使用した基準日は 2000 年 1 月 1 日で、土曜日でした。ただし、n は常に 0 を返します。なぜですか? どうしたの ?

カレンダー クラスを使用できません。それは数学的でなければなりません。

public static void main(int d1, int d2, int m1, int m2, int y1, int y2)
{
    int n =0;
    for(;d1!=d2&&m1!=m2&&y1!=y2;n++)
    {
        if(m1==1 || m1==3 || m1==5 || m1==7 || m1==8 || m1==10 || m1==12)
        {
            if(d1==31)
            {
                m1++;
                d1=1;
                n++;
                if(m1>12)
                {
                    m1=1;
                    y1++;
                }
            }
            else
            {
                d1++;
                n++;
            }
        }
        else if(m1==4 || m1==6 || m1==9 || m1==11)
        {
            if(d1==30)
            {
                m1++;
                d1=1;
                n++;
                if(m1>12)
                {
                    m1=1;
                    y1++;
                }
            }
            else
            {
                d1++;
                n++;
            }
        }
        else if(m1==2)
        {
            if(returnLeap(y1))
            {
                if(d1==29)
                {
                    m1++;
                    d1=1;
                    n++;
                }
                else
                {
                    d1++;
                    n++;
                }
            }
            else
            {
                if(d1==28)
                {
                    m1++;
                    d1=1;
                    n++;
                }
                else
                {
                    d1++;
                    n++;
                }
            }
        }
    }
    System.out.println(n);
}
4

2 に答える 2

0

それは間違いなく、この問題を解決するための大きな方法です。日、月、または年のいずれかが一致すると、 for ループが終了するようです。おそらく、3つすべてが一致したときに終了するつもりでした。

for(;d1!=d2||m1!=m2||y1!=y2;n++)

別の提案を受け入れる場合は、どうですか

public static void main(int d, int m, int y)
{
   int n = (d + 5 * ((year - 1) % 4) + 4 * ((year - 1) % 100) + 6 * ((year - 1) % 400)) % 7;

   switch (m) {
        case 12: n += 30;
        case 11: n += 31;
        case 10: n += 30;
        case 9:  n += 31
        case 8:  n += 31;
        case 7:  n += 30
        case 6:  n += 31
        case 5:  n += 30
        case 4:  n += 31
        case 3:  n += 28;
                 if(returnLeap(y)) { n++; }
        case 2:  n += 31;
    }
    System.out.println(n % 7);
}

これはガウスのアルゴリズムに基づいています (あの男は天才でした)。

于 2013-08-06T08:07:56.613 に答える
-2
Calendar cal = Calendar.getInstance();
cal.set(2013, 7, 1);
Date startDate = cal.getTime();

cal.clear();
cal.set(2013, 8, 1);
Date endDate = cal.getTime();

long diffDays = (endDate.getTime() - startDate.getTime()) / 1000 / 60 / 60 / 24;
于 2013-08-06T08:07:52.110 に答える