私は、教育的な仕事(学校)としてコンソールベースのカレンダーに取り組んでいます。ユーザーが入力した特定の月のカレンダーシートを表示する必要があります。私はほとんどそこにいるが、今月はすべて月曜日に始まることに気づいた。私はstringbuilderを使ってシートを作成しました。月の最初の日に実際にゼロが来る前に日数を埋めるようにしましたが、まだ動作しません。 forループは私の試みです。誰もがアイデアを持っていますか?まだ勉強してる。ここではその問題とは別に、正常に動作しますwhichsシートを、構築するコードは次のとおりです。Consolebuilder with stringbuilderカレンダーシート
DateTime date = DateTime.Now;
List<DateTime> dateList = new List<DateTime>();
DateTime dateCopyForModification = date;
int inputMonth = date.Month;
while (dateCopyForModification.Month == inputMonth)
{
dateList.Add(dateCopyForModification);
dateCopyForModification = dateCopyForModification.AddDays(1);
}
Console.WriteLine("\t---------\n\t{0}, {1}\n\t---------", date.ToString("MMMM"), date.Year);
int dayCounter = 0;
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.Append("\nMo\t|\tDi\t|\tMi\t|\tDo\t|\tFr\t|\tSa\t|\tSo\t|\n-----------------------------------------------------------------------------------------------------\n");
foreach (DateTime dateTime in dateList)
{
//the part that doesnt work
int day = (int)dateTime.DayOfWeek;
if (dateTime == new DateTime(dateTime.Year, dateTime.Month, 1))
{
for (day = 1; day == (int)dateTime.DayOfWeek; day++)
{
stringBuilder.Append("0");
dayCounter++;
}
}
//until here
else
{
stringBuilder.Append(dateTime.Day);
dayCounter++;
}
if (dateTime.Day == 28)
{
stringBuilder.Append(" |");
}
else
{
stringBuilder.Append("\t|\t");
}
if (dayCounter == 7)
{
stringBuilder.Append("\n");
dayCounter = 0;
}
}
Console.Write(stringBuilder);
Console.ReadKey();
私があなたに何をしようとしているのか、現在の結果が本当に明確ではないかと心配です。これを[mcve]に減らすことはできますか?内側のループだけが関連しているように見えますが、わかりませんが、具体的な例があれば助けがさらに簡単になります。 –
残りのコードは、forループとif文以外のすべてを意味し、単にカレンダーシートを生成します。列にはタイトルとしてMo-Frがあり、その下にはWindowsのカレンダーと同様に日付が表示されます。私は日付を追加する方法は、それはいつも月曜日から始まり、私はその月の最初の実際の平日にそれをプッシュしたい。私は残りを取り除きます。 – tweedledum11
問題を理解するために、外部foreachループが必要ですか?これを*完全な例にハードコード化された日付で変換し、コピー、ペースト、コンパイル、実行できるフルコンソールアプリケーションで変換できますか?問題の再現が簡単になると、簡単に手助けすることができます。 –