ミョウガです!今回は、「カレンダープログラミングにMyoga、抜錨します!」にある、Calendar.cs(GitHubでは「Calendarold.cs」)の2つの繰り返し文を1つに纏めた時のお話です。書いたプログラムを以下に示します。現在の日付を取得し、当月1日を表すインスタンスを生成します。1日の曜日に合わせてオフセットします。カレンダーを出力します。日付を出力します(最大2桁なので、最小フィールド幅を3と指定し、右寄せかつ日付間にスペースを開けます)。dayが土曜日または月末日であれば、改行します。dayを1日分進めて、月が変わるまで繰り返します。}}ここで、12行目の1日の曜日合わせのパディング処理を、15~23行目の日付出力の処理のdo文に入れて、1つの繰り返し文に統合してみました。現在の日付を取得から当月1日を表すインスタンスを生成します。当月1日からその曜日分だけ引きます。カレンダーを出力します。日付を出力します(最大2桁なので、最小フィールド幅を3と指定し、右寄せかつ日付間にスペースを開けます)。curDayが前月であれば、空白スペースを出力します。することで1日の曜日に合わせてオフセットすることができます。curDayが土曜日または当月末日であれば、改行します。curDayを1日分進めて、翌月になるまで繰り返します。}}なお、このプログラムはhttps://gist.github.com/Myoga1012/2a8bba2bbc850de06a90でも公開されています。コンテストにはこのプログラムで応募しました。10行目でAddDaysメソッドを使って1日の曜日の分(DayOfWeekプロパティの値)だけ引きます。2014年10月1日は水曜日なので、DayOfWeekプロパティの値は3、すなわち引いた後は2014年9月28日を表すDateTime構造体になります。次に日付を出力するのですが、条件分岐を使ってcurDayが前月の時は日付の代わりに、半角スペース3つを出力します。することで1日の曜日に合わせてオフセットすることができます。1日の曜日合わせのパディング処理と日付出力の統合あとは19~20行目の土曜日の日付または当月末日を出力した後の改行処理と、23行目の繰り返し条件を最適化するだけです。月末日の改行では、前月の末日で改行しないように、curDayとnow1のMonthプロパティの値を比較しています。することで、1つの繰り返し文でカレンダーを出力することができます。C#/XAML/C++などをメインにプログラミングやアプリの開発をしています。好きな物はカフェラテとハーブティ、趣味は写真撮影と艦これです。コメントをキャンセルメールアドレスが公開されることはありません。コメントデータの処理方法の詳細はこちらをご覧ください。