2014-02-12 3 views
0

У меня скоро появится проект. Мы должны написать программу, которая запрашивает год и распечатывает календарь. Мы можем использовать только один, один для одного и один цикл переключателя. (и нет массивов!). Мне трудно понять, как распечатывать дни каждого месяца, начиная с первого дня первой недели, так как большинство месяцев не начнется в воскресенье.Программа Java Calendar

import java.util.*; 
import java.util.Calendar; 
class Lab2 { 
    public static void main(String[] args) { 
    Scanner user = new Scanner(System.in); 
    System.out.print("What year do you want to view? "); 
    int year = user.nextInt(); 
    System.out.printf("%12d\n", year); 
    System.out.println(); 
    boolean leap = isLeap(year);  
    int firstDay = JulianDate(year); 
    monthLoop(year, firstDay, leap); 
} 

public static boolean isLeap(int year) { 
    boolean verdict = false; 
    if (year % 100 == 0 && year % 400 == 0) { 
     verdict = true; 
    } 
    if(year % 100 != 0 && year % 4 == 0) { 
     verdict = true; 
    } 
    return verdict; 
} 


public static int JulianDate(int year) { 
    Calendar calendar = Calendar.getInstance(); 
    calendar.set(Calendar.YEAR, year); 
    calendar.set(Calendar.DAY_OF_YEAR, 1); 
    int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK) - 1; 
    return dayOfWeek; 
} 

public static void monthLoop(int year, int firstDay, boolean leap) { 
    for(int i=1; i <= 12; i++) { 
     switch (i) { 
      case 1: System.out.printf("%13s\n", "January"); 
        break; 
      case 2: System.out.printf("%13s\n", "February"); 
        break; 
      case 3: System.out.printf("%12s\n", "March"); 
        break; 
      case 4: System.out.printf("%12s\n", "April"); 
        break; 
      case 5: System.out.printf("%11s\n", "May"); 
        break; 
      case 6: System.out.printf("%11s\n", "June"); 
        break; 
      case 7: System.out.printf("%11s\n", "July"); 
        break; 
      case 8: System.out.printf("%13s\n", "August"); 
        break; 
      case 9: System.out.printf("%14s\n", "September"); 
        break; 
      case 10: System.out.printf("%13s\n", "October"); 
        break; 
      case 11: System.out.printf("%14s\n", "November"); 
        break; 
      case 12: System.out.printf("%14s\n", "December"); 
        break;      
     } 

    System.out.println("S M Tu W Th F S"); 


    } 

} 

} 
+1

Кажется, вам разрешено использовать «Календарь» на основе вашего код, который должен иметь много всего для вас, включая имена месяца и дня, и интерес к високовому году ... Познакомьтесь с тем, что класс будет делать для вас, - очень вероятно, что вы можете просто продолжать увеличивать день в вашем основном цикле. – Krease

+0

'import java.util.calendar;' java имеет встроенный класс календаря, который имеет метод для високосных лет, дней, всего. Вы можете расширить класс от своего – ChriskOlson

ответ

0

Вы бы получить день недели, так как в этом посте, в первый день месяца, а затем запустить счетчик оттуда.

How to get the day of the week in Java

Например, если день недели было 5, вы бы поставил 4 «пробелы» до первой даты. Фокус в том, что когда вы делаете свой мод, чтобы определить, должна ли быть новая строка, это будет (dayofMonth + firstDayOfWeekOfMonth)% 7