Javaの道 Javaに関する
 ニュースJava基本Servlet・JSPオープンソースFAQ掲示板
Javaの道 >  掲示板 >  掲示板(javaのカレンダー表示について)
閲覧数:1429
掲示板(javaのカレンダー表示について)
名前
匿名
題名 javaのカレンダー表示について
質問内容

質問を評価する
(0ポイント)
初めて質問させて頂きます
以下のプログラムにおいて
ツェラーの公式を使わずにプログラムを書きなおせと言
われこまっています
どういったプログラムにすればいいでしょうか?
メインクラスからyearとmonthの値を決定するのでメイ
ンは別にあります
また、1年1月1日は土曜日です

public class MyCalendar{//MyCalendarの宣言
    private int year,month; //年と月を宣言
    public MyCalendar(int tosi,int tuki){ 
//MyCalendarのコンストラクタ
    year=tosi;//年を代入
    month=tuki;//月を代入
    }

    private int numberOfDays(){//umberOfDaysの宣言
    switch(month){//月ごとの日数を計算
    case 1: // 一月の場合
    case 3: //三月の場合
    case 5: //五月の場合
        case 7: //七月の場合
    case 8: //八月の場合
    case 10: //十月の場合
    case 12: //十二月の場合
        return 31; //31日を返す
    case 4: //四月の場合
    case 6: //六月の場合
    case 9: //九月の場合
    case 11: //十一月の場合
        return 30; //30日を返す
    case 2: //二月の場合
        if(year%4==0 && year%100!=0){ //年が4
で割り切れ、かつ年が100で割り切れない
        return 29; //29日を返す
        }else{ if(year%400==0){ //月が400で割
り切れる場合
            return 29; //29日を返す
        }else{
            return 28; //28日に返す
        }
        }
    }
    return 0; //問題ではエラー処理について記述
がないため0を返す
    }
    private int firsDay(){ //firsDayの宣言
    int y,m; //月と年の値を変えないために別の
変数を用意する
    int zeller;//ツェラーの計算を格納
    y=year; //年を代入
    m=month;//月を代入
    if(month<3){//ツェラーの定義
        y=y-1; //月-1
        m=m+12;//1,2,月を13,14月と考える
    }
    zeller=((y+(y/4)-(y/100)+(y/400)+
((13*m+8)/5)+1)%7);//ツェラーの計算 
    return zeller;//ツェラーの値を返す
    }

    public String getCalendar(){//getCalendarを定

    String calendar;//印字するカレンダーの文字
列を格納
    int count=0;//改行する位置を把握する
    calendar = "*****************************
\n";//*を格納
    switch(month){//月ごとの英語を格納する
    case 1://一月の場合
        calendar+="           JAN ";//JANを格

        break;//caseを抜ける
    case 2://二月の場合
        calendar+="           FEB ";//FEBを格

        break;//caseを抜ける
    case 3://三月の場合
        calendar+="           MAR ";//MARを格

        break;//caseを抜ける
    case 4://四月の場合
        calendar+="           APR  ";//MARを格

        break;//caseを抜ける
    case 5://五月の場合
        calendar+="           MAY  ";//MAYを格

        break;//caseを抜ける
    case 6://六月の場合
        calendar+="           JUN  ";//JUNを格

        break;//caseを抜ける
    case 7://七月の場合
        calendar+="           JULY ";//JULYを
格納
        break;//caseを抜ける
    case 8://八月の場合
        calendar+="           AUG  ";//AUGを格

        break;//caseを抜ける
    case 9://九月の場合
        calendar+="           SEPT ";//SEPTを
格納
        break;//caseを格納
    case 10://十月の場合
        calendar+="           OCT  ";//OCTを格

        break;//caseを格納
    case 11://十一月の場合
        calendar+="           NOV  ";//NOVを格

        break;//caseを抜ける
    case 12://十二月の場合
        calendar+="           DEF  ";//DEFを格

        break;//caseを抜ける
    }
    calendar+=" "+year+" \n";//年を格納
    calendar+="Sun Mon Tue Wed Thu Fir Sat
\n";//各曜日を格納
    for(int j=0;j<firsDay();j++){//一日の曜日
まで繰り返す
        calendar+="    ";//空白を格納
        count++;//改行のカウント
    }
    for(int i=1;i<numberOfDays();i++){//月の日
数まで繰り返す
        if(i>10){//10未満の場合
        calendar+=" "+i+" ";//数字を格納
        count++;//改行カウントを増加
        }else if(i==10){//10の場合
        calendar+=" "+i+" ";//数字を格納
        count++;//改行カウントを増加
        }else{
        calendar+="  "+i+" ";//数字を格納
        count++;//改行カウントを増加
        }
        if(count>6){//カウントが6以上になれば
        calendar+="\n";//改行
        count=0;//カウントを0に
        }
    }
    calendar+=" "+numberOfDays();//最終日を格

    calendar+="\n*****************************
";//*を格納
    return calendar;//格納した文字列を返す
    }

    public void setYear(int hyear){//setYearの宣言
    year=hyear;//年の変更
    }

    public void setMonth(int hmonth){//setMonthの
宣言
    month=hmonth;//月の変更
    }
}
質問日時 2013-05-26 14:46:04
名前
回答内容

回答を評価する
(0ポイント)
「ツェラーの公式を使わずに」が何を意味してるのでしょうか?

Java らしくプログラムするなら java.util.Calendar クラスを
使えば曜日も月の日数等も得られます。

原始的な計算なら new Date.toString() による現在時の文字列表現を
解析し、日数から割り出せますが、計算自体はツェラーの公式に
似たような物になってしまうでしょう。
回答日時 2013-05-26 17:11:41
名前
匿名
回答内容

回答を評価する
(0ポイント)
解答ありがとうございます
学校の課題で、Calendarクラスなど使わないように、自分
で一日を求めるよう条件があったため、このような質問に
なりました。
こちらの質問不足でした。
Calendarクラスや現在の時刻、ツェラー(1日を求める公
式)をつかわずにプログラムを書かなけらばなりませんの
で、ご教授おねがいします
プログラムを載せていただけると助かります
回答日時 2013-05-26 21:12:24
名前
匿名
回答内容

回答を評価する
(0ポイント)
直接の答えは、ここではあまり出ないよ。
それに、課題が分からないからとまんま質問するのは、
ガイドラインを読めば問題のある質問の仕方だと分かる。

例えば、万年カレンダーの作り方をぐぐったりはしたかな。
Javaにこだわるとなかなかいい情報は得られない。
回答日時 2013-05-26 21:56:38
名前
回答内容

回答を評価する
(0ポイント)
曜日がわかっている基準日が無いと計算不能です。
現在時からが駄目なら何か基準をハードコードするしかありません。
Java でも使ってる 1970.1.1 とか あなたの誕生日とか
プログラムを書いてる日とか。
基準があればその日との日数差から求められます。
回答日時 2013-05-27 02:17:29
名前
匿名
回答内容

回答を評価する
(0ポイント)
質問は、指定された年月の"ついたち"が何曜日かを返すプ
ログラムについてですか?
Calendarやツェラーの公式を使わずにというのであれば
1年1月1日から、指定された年月(-1月)までの日にちを数
えるしかないんじゃないの。
正しい曜日を返すとは思えんけど。
回答日時 2013-05-28 10:37:29
名前
匿名
回答内容

回答を評価する
(0ポイント)
カレンダーの曜日が結局は7周期の値でしかないと理解する
ことができれば、基準にする日さえあれば何とかなると
分かると思うけどねえ。

グレゴリオ暦採用前のことを考えなければ、ひどく単純。
回答日時 2013-05-28 19:07:18
名前
匿名
回答内容

回答を評価する
(0ポイント)
空白の10日間とかはいるとたのしいよね・w・
回答日時 2013-05-30 15:24:45

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。



このページのトップへ
 ニュースJava基本Servlet・JSPオープンソースFAQ掲示板
Javaの道_CopyrightJavaの道