Я представляю, что проблема, которую вы описываете, состоит в том, что в месяце, который начинается в воскресенье, календарь пропускает всю строку. Как на изображении:
![February 2020](https://i.stack.imgur.com/PL4GB.png)
Это происходит потому, что ваш метод public static int DisplayCalender(int days, int start)
получает параметр int start
со значением 7
. Это заставляет записывать вкладки на целую неделю на вашем первом for
, а затем пропустить строку на втором for
.
Чтобы решить эту проблему, вы можете просто переназначить startDay
с нулем, когда оно равно 7
и проверьте вкладку l oop для startDay
вместо start
:
public static int DisplayCalender(int days, int start) //Display Function//
{
int startDay = start == 7 ? 0 : start;
Console.WriteLine("Sun\tMon\tTue\tWed\tThu\tFri\tSat");
for (int i = 0; i < startDay; i++)
Console.Write("\t");
for (int i = 1; i <= days; i++)
{
if (startDay > 6)
{
startDay = 0;
Console.WriteLine();
}
Console.Write(i + "\t");
startDay++;
}
return startDay;
}
Это даст ожидаемый результат:
![enter image description here](https://i.stack.imgur.com/FTXrw.png)
Что вы можете улучшить здесь?
Создание всего этого с нуля, вероятно, позволило вам многое узнать о l oop и потоке. Если у вас есть время, проверьте DateTime . Там у вас есть методы, чтобы найти високосные годы, день недели и месяц. Это поможет вам значительно упростить ваш код.
Добро пожаловать в StackOverflow!