

sample53.java

[code]

    import java.io.*; 
    
    public class sample53{ 
        public static void main(String[] args) throws Exception{ 
        BufferedReader in =  
            new BufferedReader(new InputStreamReader(System.in)); 
    
        System.out.print("Year?: "); 
        String str1 = in.readLine(); 
        System.out.print("Month?: "); 
        String str2 = in.readLine(); 
    
        int year = Integer.parseInt(str1); 
        int month = Integer.parseInt(str2); 
        int dow = dayofweek(year, month); 
        int dim = daysinmonth(year, month); 
    
        showcal(dow, dim); 
        } 
    
        // カレンダーを表示する 
        public static void showcal(int dow, int days) throws Exception{ 
        System.out.println("Su Mo Tu We Th Fr Sa"); 
    
        int d = 1; 
        int i; 
    
        // 最初の週の表示  
        for(i = 0; i < dow; i++){ 
            System.out.print("   "); 
        } 
        for(; i < 7; i++){ 
            System.out.print(" " + d + " "); 
            d++; 
        } 
        System.out.println(); 
    
        // 二週目以降の表示 
        for(int j = 0; d <= days; j++){ 
            for(i = 0; i < 7 && d <= days; i++){ 
            if(d < 10) 
                System.out.print(" " + d + " "); 
            else 
                System.out.print(d + " "); 
            d++; 
            } 
            System.out.println(); 
        } 
        } 
    
        // 月の日数をかえす 
        public static int daysinmonth(int year, int month) throws Exception{ 
        int dim = 31; 
        if(month == 4 || month == 6 || month == 9 || month == 11) 
            dim = 30; 
        if(month == 2){ 
            if((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) 
            dim = 29; // うるう年 
            else 
            dim = 28; 
        } 
        return dim; 
        } 
    
        // 年の日数をかえす 
        public static int daysinyear(int year) throws Exception{ 
        int diy; 
        if((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) 
            diy = 366; // うるう年 
        else 
            diy = 365; 
        return diy; 
        } 
    
        // 月の初日の曜日をかえす 
        public static int dayofweek(int year, int month) throws Exception{ 
        int days = 0; 
        int y = 0, m = 0; 
        int dow = 0; 
    
        // 2000年以降 
        if(year >= 2000){ 
            for(y = 2000; y < year; y++){ 
            days = days + daysinyear(y); 
            } 
            for(m = 1; m < month; m++){ 
            days = days + daysinmonth(year, m); 
            } 
            dow = (days + 6) % 7; 
        } 
    
        // 1999年以前 
        else{ 
            for(m = month; m <= 12; m++){ 
            days = days + daysinmonth(year, m); 
            } 
            for(y = year + 1; y < 2000; y++){ 
            days = days + daysinyear(y); 
            } 
            dow = 6 - days % 7; 
        } 
        return dow; 
        } 
    } 
    
[/code]

day_of_week.java

[code]

    import java.util.Date; 
    import java.util.Calendar; 
    
    
    class day_of_week{ 
    
    
    String yo(int b_yy, int b_mm , int b_dd){ 
        Date today = new Date(); 
        Calendar cal = Calendar.getInstance(); 
        cal.set(Calendar.YEAR, b_yy); 
        cal.set(Calendar.MONTH, b_mm-1); 
        cal.set(Calendar.DATE,b_dd); 
    
        int h = cal.get(Calendar.DAY_OF_WEEK); 
        String yo =""; 
        switch(h){ 
            case 1: yo = "日"; break; 
            case 2: yo = "月"; break; 
            case 3: yo = "火"; break; 
            case 4: yo = "水"; break; 
            case 5: yo = "木"; break; 
            case 6: yo = "金"; break; 
            case 7: yo = "土"; break; 
        } 
    
    
        return yo; 
        } 
    } 
    
[/code]

> leap_year.java  
>  class leap_year{  
>  int dim;  
>  int uruudosi(int yy);  
>  if((year % 4 == 0 && year % 100 != 0) || year % 400 == 0){  
>  dim = 29; // うるう年  
>  else  
>  dim = 28;  
>  }  
>  return dim;  
>  }  
>  cmd
[code]

>     Year?: 2015
>     Month?: 2
>     Su Mo Tu We Th Fr Sa
>      1  2  3  4  5  6  7
>      8  9 10 11 12 13 14
>     15 16 17 18 19 20 21
>     22 23 24 25 26 27 28
>  
[/code]

よろしくお願いいたします。


CC BY-SA 3.0
2015-07-09T07:57:20.910
12196
2015-07-10T01:07:24.677
2015-07-10T01:07:24.677
3516
10289
question
java
day_of_week.javaとleap_year.java（うるう年計算）を使いcalendar.javaのcmdを出したい。


daysinmonthメソッドで、既にタイトルの要求を満たしているように見受けられます。  
閏年判定をleap_year.javaに分離するという課題だと推測して回答を記述します。

BLUEPIXYさんのコメントにあるように、daysinmonthメソッド内で閏年判定を行うロジックは完成していますので、leap_year.javaのclass
leap_yearクラスの内部にdaysinmonthメソッドを丸ごとコピペするだけで閏年判定と末日の取得が可能です。

さて、任意の年が閏年かどうか判定するにはjava.util.GregorianCalendar#isLeapYearが便利です。  
上記クラスにはstaticメソッドが用意されておらずインスタンス化が必要ですので、leap_yearクラスをラッパークラスにして1行で閏年判定するコードの例を以下に記述します。

leap_year.java

[code]

    import java.util.Calendar;
    import java.util.Date;
    import java.util.GregorianCalendar;
    
    /**
     * タイムゾーンとかどうでもいい気分の時にワンライナーで閏年判定をするクラス
     *
     */
    public class leap_year {
    
        /**
         * 標準のタイムゾーンを使用する閏年判定
         *
         * @param year 判定対象の西暦年
         * @return 対象が閏年ならばtrue
         */
        static boolean isLeapYear(int year) {
            GregorianCalendar calendar = new GregorianCalendar();
            return calendar.isLeapYear(year);
        }
    
        /**
         * 標準のタイムゾーンを使用する閏年判定
         *
         * @param calendar 判定対象のCalendarインスタンス
         * @return 対象が閏年ならばtrue
         */
        static boolean isLeapYear(Calendar calendar) {
            return isLeapYear(calendar.get(Calendar.YEAR));
        }
    
        /**
         * 標準のタイムゾーンを使用する閏年判定
         *
         * @param date 判定対象のjava.util.Dateインスタンス
         * @return 対象が閏年ならばtrue
         */
        static boolean isLeapYear(Date date) {
            Calendar calendar = Calendar.getInstance();
            calendar.setTime(date);
            return isLeapYear(calendar);
        }
    }
    
[/code]

上記クラスを利用する場合、sample53.javaの daysinmonthメソッドは以下のように書き換えます。

[code]

    // 月の日数をかえす 
    public static int daysinmonth(int year, int month) throws Exception {
        int dim = 31;
        if (month == 4 || month == 6 || month == 9 || month == 11) {
            dim = 30;
        }
        if (month == 2) {
            if (leap_year.isLeapYear(year)) {
                dim = 29; // うるう年 
            } else {
                dim = 28;
            }
        }
        return dim;
    }
    
[/code]


CC BY-SA 3.0
2015-07-09T14:51:37.153
12219
2015-07-09T14:51:37.153
9820
12196
answer