2014-10-01 5 views
4

내가 무엇을 가지고 :윤년 알고리즘이 작동하지 않는 이유는 무엇입니까 (Java)? 여기

Scanner input = new Scanner(System.in); 
    System.out.print("Enter a year: "); 
    int Year = input.nextInt(); 
    System.out.print("Enter a month (first three letters with the first" 
      + " letter uppercase): "); 
    String Month = input.next(); 

    String ThirtyOne = "Jan" + "Mar" + "May" + "Jul" + "Aug" + "Oct" + "Dec"; 
    String DaysThirtyOne = ThirtyOne.substring(21) + "31"; 

    String Thirty = "Apr" + "Jun" + "Sep" + "Nov"; 
    String DaysThirty = Thirty.substring(12) + "30"; 

    String TwentyEight = "Feb"; 
    String DaysTwentyEight = TwentyEight.substring(3) + "28"; 
    String DaysLeapYear = TwentyEight.substring(3) + "29"; 


    boolean isLeapYear = ((Year % 4 == 0) && (Year % 100 != 0) && (Year % 400 == 0)); 

    if (ThirtyOne.contains(Month)) { 
     System.out.println(Month + " " + Year + " has " + DaysThirtyOne 
       + " days in it."); 
    } 
    if (Thirty.contains(Month)) { 
     System.out.println(Month + " " + Year + " has " + DaysThirty 
       + " days in it."); 
    } 
    if(TwentyEight.contains(Month)) { 
     System.out.println(Month + " " + Year + " has " + DaysTwentyEight 
       + " days in it."); 
    } 
    if (isLeapYear) { 
     System.out.println(Month + " " + Year + " has " + DaysLeapYear 
       + " days in it."); 
    } 

이 코드는 미숙 보이는 경우 나는 놀라지 않을 것이다, 그래서 내가 프로그래밍에 새로운 오전. 어쨌든, 나는 사용자 입력을 년 1 달 (처음 세 글자) 있습니다. 나는 사용자가 4, 100, 400으로 나눌 수있는 해가 무엇이든간에 윤년을 나타내는 부울 변수를 만들었습니다. 그런 다음 "Feb (모든 연도 사용자 입력)에 DaysLeapYear가 있습니다. " Twalloweight의 if 문을 꺼내서 진술서를 작성한 경우 컴퓨터에서 윤년 인 경우 2 월의 며칠을 인쇄하지 않기 때문에 알고리즘에 문제가 있다고 생각합니다. . 다시 말하지만, 나는 알고리즘에서 잘못 될 것 같지만, 다른 곳에서있을 수 있으며, 결국이 새로운 것을 본 사람이 아닌지를보기 위해 다른 모습을 기대하고 있습니다.

+3

"윤년 알고리즘이 작동하지 않는 이유는 무엇입니까?"- 제대로 작동합니까? – Tucker

+1

@ Tucker double negative. * facepalm –

+0

'부울 isLeapYear = ((Year % 4 == 0) && (Year % 100! = 0) && (Year % 400 == 0)); - 이걸로 2000 년은 윤년이 아니었다 – khelwood

답변

1

먼저 isLeapYear 조건을 변경해야합니다.

boolean isLeapYear = ((Year % 4 == 0) && (Year % 100 != 0) || (Year % 400 == 0)); 

윤년 고려하는 변경이 필요에 대한 다음 귀하의 경우 (TwentyEight.contains (월)).

if(TwentyEight.contains(Month) && !isLeapYear) { 
     System.out.println(Month + " " + Year + " has " + DaysTwentyEight 
       + " days in it."); 
} 
+2

감사합니다. 나는 그것이 같지 않으면 넣어야 만하는지 몰랐다. 알고리즘을 도와 주셔서 감사합니다. –