2015-10-02 2 views
-2

Как получить java для применения выбора в високосный год? Правило каждые четыре года происходит с високосного года, начиная с 0. Логическое значение, которое я сделал, - leapYear = year% 4 == 0, но когда я вводил leapYear, например. 4, оператор if (в марте), при котором leapYear выводит пустые строки. Вот код:Выбор Java для календарного високосного года

 public static void main(String[] args) { 
// create a scanner 
Scanner input = new Scanner(System.in); 

//prompt user to enter year and first weekday 
System.out.println("Enter a year"); 
int year = input.nextInt(); 
System.out.println("Enter first weekday of year e.g.: 0 for Sunday"); 
int weekDay = input.nextInt(); 
int i; 
int jan = 31; 
int feb = 28; 
int mar = 31; 
int apr = 30; 
int may = 31; 
int jun = 30; 
int jul = 31; 
int aug = 31; 
int sep = 30; 
int oct = 31; 
int nov = 30; 
int dec = 31; 
// leap year 
boolean leapYear = year % 4 == 0; 
if (leapYear) feb += 1; 

System.out.println("January " + year); 
System.out.println("________________________________"); 
System.out.println(" Sun Mon Tue Wed Thu Fri Sat"); 

if (weekDay == 1) System.out.printf("%4s", " "); 
if (weekDay == 2) System.out.printf("%8s", " "); 
if (weekDay == 3) System.out.printf("%12s", " "); 
if (weekDay == 4) System.out.printf("%16s", " "); 
if (weekDay == 5) System.out.printf("%20s", " "); 
if (weekDay == 6) System.out.printf("%24s", " "); 

for (i = 1; i <= jan; i++) { 
    System.out.printf("%4d", i); 
    if (weekDay == 0 && i % 7 == 0) System.out.println("\n"); 
    if (weekDay == 1 && (i == 6 || i == 13 || i == 20 || i == 27)) System.out.println("\n"); 
    if (weekDay == 2 && (i == 5 || i == 12 || i == 19 || i == 26)) System.out.println("\n"); 
    if (weekDay == 3 && (i == 4 || i == 11 || i == 18 || i == 25)) System.out.println("\n"); 
    if (weekDay == 4 && (i == 3 || i == 10 || i == 17 || i == 24)) System.out.println("\n"); 
    if (weekDay == 5 && (i == 2 || i == 9 || i == 16 || i == 23 || i == 30)) System.out.println("\n"); 
    if (weekDay == 6 && (i == 1 || i == 8 || i == 15 || i == 22 || i == 29)) System.out.println("\n"); 
    } 
System.out.println("\n"); 
System.out.println("February " + year); 
System.out.println("________________________________"); 
System.out.println(" Sun Mon Tue Wed Thu Fri Sat"); 
if (weekDay == 0) System.out.printf("%12s", " "); 
if (weekDay == 1) System.out.printf("%16s", " "); 
if (weekDay == 2) System.out.printf("%20s", " "); 
if (weekDay == 3) System.out.printf("%24s", " "); 
if (weekDay == 5) System.out.printf("%4s", " "); 
if (weekDay == 6) System.out.printf("%8s", " "); 
for (i = 1; i <= feb; i++) { 
    System.out.printf("%4d", i); 
    if (weekDay == 0 && (i == 4 || i == 11 || i == 18 || i == 25)) System.out.println("\n"); 
    if (weekDay == 1 && (i == 3 || i == 10 || i == 17 || i == 24)) System.out.println("\n"); 
    if (weekDay == 2 && (i == 2 || i == 9 || i == 16 || i == 23)) System.out.println("\n"); 
    if (weekDay == 3 && (i == 1 || i == 8 || i == 15 || i == 22)) System.out.println("\n"); 
    if (weekDay == 4 && i % 7 == 0) System.out.println("\n"); 
    if (weekDay == 5 && (i == 6 || i == 13 || i == 20 || i == 27)) System.out.println("\n"); 
    if (weekDay == 6 && (i == 5 || i == 12 || i == 19 || i == 26)) System.out.println("\n"); 

} 

System.out.println("\n"); 
System.out.println("March " + year); 
System.out.println("________________________________"); 
System.out.println(" Sun Mon Tue Wed Thu Fri Sat"); 

if (leapYear) { 
    if (weekDay == 0) System.out.printf("%4s", " "); 
    if (weekDay == 1) System.out.printf("%8s", " "); 
    if (weekDay == 2) System.out.printf("%12s", " "); 
    if (weekDay == 3) System.out.printf("%16s", " "); 
    if (weekDay == 5) System.out.printf("%20s", " "); 
    if (weekDay == 6) System.out.printf("%24s", " "); 

    for (i = 1; i <= mar; i++) { 
     if (weekDay == 6 && (i == 4 || i == 11 || i == 18 || i == 25)) System.out.println("\n"); 
     if (weekDay == 0 && (i == 3 || i == 10 || i == 17 || i == 24)) System.out.println("\n"); 
     if (weekDay == 1 &&(i == 2 || i == 9 || i == 16 || i == 23 || i == 30)) System.out.println("\n"); 
     if (weekDay == 2 &&(i == 1 || i == 8 || i == 15 || i == 22 || i == 29)) System.out.println("\n"); 
     if (weekDay == 3 && i % 7 == 0) System.out.println("\n"); 
     if (weekDay == 4 && (i == 6 || i == 13 || i == 20 || i == 27)) System.out.println("\n"); 
     if (weekDay == 5 && (i == 5 || i == 12 || i == 19 || i == 26)) System.out.println("\n"); 
     } 
} 
else { 
if (weekDay == 0) System.out.printf("%12s", " "); 
if (weekDay == 1) System.out.printf("%16s", " "); 
if (weekDay == 2) System.out.printf("%20s", " "); 
if (weekDay == 3) System.out.printf("%24s", " "); 
if (weekDay == 5) System.out.printf("%4s", " "); 
if (weekDay == 6) System.out.printf("%8s", " "); 

for (i = 1; i <= mar; i++) { 
    System.out.printf("%4d", i); 
    if (weekDay == 0 && (i == 4 || i == 11 || i == 18 || i == 25)) System.out.println("\n"); 
    if (weekDay == 1 && (i == 3 || i == 10 || i == 17 || i == 24)) System.out.println("\n"); 
    if (weekDay == 2 && (i == 2 || i == 9 || i == 16 || i == 23 || i == 30)) System.out.println("\n"); 
    if (weekDay == 3 && (i == 1 || i == 8 || i == 15 || i == 22 || i == 29)) System.out.println("\n"); 
    if (weekDay == 4 && i % 7 == 0) System.out.println("\n"); 
    if (weekDay == 5 && (i == 6 || i == 13 || i == 20 || i == 27)) System.out.println("\n"); 
    if (weekDay == 6 && (i == 5 || i == 12 || i == 19 || i == 26)) System.out.println("\n");  
} 
} 
+0

Какова значимость всего этого кода? –

+0

Напишите программу, которая предложит пользователю ввести год и в первый день года и отобразит таблицу календаря за год на консоли. – JavaLearner

+0

, так что это не должно быть «настоящими» датами, если вы говорите, что 2015 год и первый день - воскресенье, тогда это нормально? – Michael

ответ

0

Ваш код трудно читать, но вам не хватает System.out.printf ("% 4d", I); в блоке под if (leapYear). Тем не менее, вы также применение високосный год март ...

Альтернативный подход ...

import java.util.Scanner; 

public class StackOverflow_32900399 { 

    public static void main(String[] args) 
    { 
     Scanner input = new Scanner(System.in); 

     try 
     { 
      System.out.println("Enter a year"); 
      int year = input.nextInt(); 

      System.out.println("Enter first weekday of year e.g.: 0 for Sunday"); 
      int weekDay = input.nextInt(); 

      for (int month = 1; month <= 12; month++) 
      { 
       printMonthHeader(month, year); 
       weekDay = printDaysOfMonth(month, year, weekDay); 
       System.out.println("\n"); 
      } 
     } 
     finally 
     { 
      input.close(); 
     } 
    } 

    private static void printMonthHeader(int monthOfYear, int year) 
    {  
     String month = ""; 

     switch (monthOfYear) 
     { 
      case 1 : month = "January"; break; 
      case 2 : month = "February"; break; 
      case 3 : month = "March"; break; 
      case 4 : month = "April"; break; 
      case 5 : month = "May"; break; 
      case 6 : month = "June"; break; 
      case 7 : month = "July"; break; 
      case 8 : month = "August"; break; 
      case 9 : month = "September"; break; 
      case 10 : month = "October"; break; 
      case 11 : month = "November"; break; 
      case 12 : month = "December"; break; 
     } 


     System.out.println(month + " " + year); 
     System.out.println("___________________________________"); 
     System.out.println(" Sun Mon Tue Wed Thu Fri Sat "); 
    } 

    private static int printDaysOfMonth(int monthOfYear, int year, int startOn) 
    { 
     int daysInMonth = 0; 
     int currentDay = startOn; 

     switch(monthOfYear) 
     { 
      case 4 : 
      case 6 : 
      case 9 : 
      case 11 : 
       daysInMonth = 30; 
       break; 
      case 2: 
       daysInMonth = ((year % 4) == 0 ? 29 : 28); 
       break; 
      default: 
       daysInMonth = 31; 
     } 

     StringBuilder buff = new StringBuilder(); 
     if (currentDay != 0) 
     { 
      buff.append(String.format("%1$"+(5*startOn)+ "s", "")); 
     } 

     for (int day = 1; day <= daysInMonth; day ++) 
     { 
      String padding = day > 9 ? " " : " "; 
      buff.append(padding + day + " "); 

      if (currentDay == 6) 
      { 
       buff.append("\n"); 
       currentDay = 0; 
      } 
      else 
      { 
       currentDay++; 
      } 
     } 

     System.out.println(buff.toString()); 
     System.out.println("___________________________________"); 
     return currentDay; 
    } 

} 
+0

Истинный, однопоточный, обновленный – Michael

+0

Я вернулся к обновлению, и в марте я также обнаружил недостающую строку печати. Благодарю. Я подробно рассмотрю альтернативный подход; его немного более продвинутый, чем то, что мы охватили, но я очень хочу учиться. (Можете ли вы сказать, что я нахожусь в интро-классе?) Спасибо, Майкл. – JavaLearner

+0

Хорошее эмпирическое правило состоит в том, что если вы копируете и вставляете один и тот же код снова и снова, есть более простой способ сделать это. Создавайте методы для выполнения подобных операций и лучше организуйте свой код. Это упрощает чтение и упрощает устранение неполадок. Если вы используете среду IDE, узнаете, как перейти в режим отладки, чтобы вы могли шаг за шагом, и посмотреть, что происходит, приходит ДЕЙСТВИТЕЛЬНО. – Michael

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