2013-08-06 2 views
0

이것은 일의 차이를 계산하는 데 사용하는 코드입니다. 'n'값을 내가 카운트로 사용하는 것으로 간주하십시오. 이 후 나는 n % 7을 사용하고 그 나머지를 사용하여 하루를 얻는다. 내가 사용한 참조 날짜는 토요일이었던 1.1.2000입니다. 그러나 n은 항상 0을 제공합니다. 이유가 무엇입니까? 뭐가 문제 야 ?주어진 날짜로부터 요일을 찾는 방법?

나는 캘린더 등급을 사용할 수 없습니다. 그것은 수학적이어야합니다. 확실히이 문제를 해결하기 위해 빅 O의 방법입니다

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); 
} 
+2

당신은'Calendar' 클래스를 사용해야합니다. 그리고 코드를 더 읽기 쉽게 만들어야합니다. – svz

+3

코드가 완전히 읽을 수 없습니다. 들여 쓰기가 멋질 것입니다. – nhrobin

+0

코드 문제가 해결되었습니다. 죄송합니다. 들여 쓰기가 끝났습니다. –

답변

0

. 일, 월 또는 연도 중 어느 하나가 일치하면 for 루프가 종료되는 것처럼 보입니다. 당신은 아마

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); 
} 

이를

에 대해이 가우스 '알고리즘을 기반으로하는 방법,

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

같은 3 일치, 당신은 다른 제안을 열려 있으면 때 종료하는 의미 (그 친구는 천재였다).

-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; 
+1

"저는 CALENDAR CLASS를 사용할 수 없습니다. 수학적이어야합니다." – atamanroman

관련 문제