質問内容
質問を評価する
(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;//月の変更 } }
|