- ベストアンサー
カレンダー作成プログラムの記述方法について
- カレンダー作成プログラムの記述方法についてお尋ねします。プログラムでは、1月から12月までのカレンダーを表示するために、ループ処理が使用されます。また、日付の表示や週のカウントなども行われます。
- 質問1について、変数weekを0で初期化する理由は、カレンダーの週のカウントを行うためです。この変数を使って、カレンダーを7日ごとに折り返す処理が行われます。
- 質問2について、変数spは、月の始まりと終わりの並びを合わせるための変数です。forループ内で、weekの値に応じてスペースを表示することで、カレンダーの日付が左詰めにならないようにしています。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
これは閏年関係なしでいいんですかね? まぁ、どうでもいいことですが^^; どなたが作成したかわかりませんが、 作成者の気持ちになって簡単にご説明いたします。 >1.int week = 0; とありますが、なぜ0を代入しているのですか? >0週なんてないのに・・・ //7日で折り返すための変数 と書いてあるので、 0週ではなく、0日ですね。 0日~6日の7日間で1週間としているようです。 >2.//一ヶ月の始まりと終わりの並びを合わせる >for(int sp = week; sp > 0; sp--){ >System.out.println(" ");//スペース3つ >} >ここの記述については「sp > 0; sp--」と記述する理由も >分かりませんが、そもそもspの変数が指しているものって >何なのでしょうか? spはスペースの数を入れる変数ですね。 先月のweekの値が4だった場合、 次は5の位置から開始するために、スペースを4つ分置く処理を行っています。 (先月が水曜日で終わったら、次は木曜日から表示する って感じです) >3.>//日付を右詰にする。 > if(day < 10){ > >//一週間のカウントを行い、折り返し処理を行う > if(week < 6){ >一番の疑問は、ここで10と6という数字が使われている理由です。 >week < 7なら納得行くけど、なぜ6なのか・・・? >day < 10については、まったく意味が分かりません。 //日付を右詰にする。 と書いてありますね。 10以上の数字と、10未満の数字の表示をキレイにする処理です。 10以上のときはそのまま表示させるけど、 10未満のときは「前に2つスペースを置いてから」表示するよ って処理ですね。 week < 6 は、折り変えしするかしないかを判断しています。 数えてみれば分かると思いますが、0,1,2,3,4,5 で6日ですよね? week が6のときは、7日目なので折り返す処理をしています。 一度どのように動いているのか、 1行1行追ってテストしてみると分かり易いかもですね。
補足
ありがとうございました。 スッキリ!とはいかないけど、だいぶ理解できました。 でも解答とこちらでの回答を照らし合わせて見れば なるほど~!って理解出来るのですが、自分だけの力で 考えようとすると一向に理解出来ないんですよね・・・