2014-10-01 2 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."); 
    } 

Я новичок в программировании, так что я не удивлюсь, если этот код выглядит незрелым. В любом случае, у меня есть пользовательский ввод год и месяц (первые три буквы). Я создал логическую переменную для високосного года, в которой говорится, что любой год, когда пользователь вводит данные, должен делиться на 4, 100 и 400. Затем я создал оператор if, если это високосный год для распечатки «Feb (любой год) пользовательские входы) имеет в нем DaysLeapYear. " Я думаю, что у меня что-то не так с моим алгоритмом, потому что, если я должен вынести заявление if TwentyEight и просто сохранил високосный год, если вы сказали, компьютер даже не распечатывает, сколько дней было бы в феврале, если бы это был високосный год , Опять же, я думаю, что я ошибаюсь в алгоритме, но это может быть где-то еще, и я надеялся на другой взгляд на это, чтобы увидеть, видит ли кто-то что-то, чего я не знаю, потому что я новичок в этом.

+3

«Почему мой алгоритм високосного года не работает» - так он работает, правильно? – Tucker

+1

@Tucker двойной отрицательный. * facepalm –

+0

'boolean isLeapYear = ((Год% 4 == 0) && (Год% 100! = 0) && (Год% 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

спасибо. Я не знал, что должен был поставить, если он не равен isLeapYear. и спасибо, что помогли мне с алгоритмом. –

Смежные вопросы