在星期天(C#)形成一条空线 使用系统; 使用System.Text.RegularExpressions; 名称空间日历 { 班级计划 { 静态void Main() { 国际年; 国际日; 字符串[]月=新字符串[]{“一月”、“二月”、“三月”、“四月”、“五月”、“六月”、“七月”、“八月”、“九月”、“十月”、“十一月”、“十二月”}; int[]天=新int[]{31,28,31,30,31,30,31,31,30,31,31}; Console.Write(“输入您希望生成日历的年份>>”; int.TryParse(Console.ReadLine(),out year);//验证// Console.Write(“输入1月1日在>>上的星期几”); int.TryParse(Console.ReadLine(),out day);//验证// while(day>31 | | day>”; Console.Write(“输入1月1日在>>上的星期几”); int.TryParse(Console.ReadLine(),out day);//验证// } switch(LeapYear(year))//switch语句检查闰年是否为真// { 大小写正确: 天数[1]+=1; Console.WriteLine(“日历年-{0}”,年份); for(int i=0;i

在星期天(C#)形成一条空线 使用系统; 使用System.Text.RegularExpressions; 名称空间日历 { 班级计划 { 静态void Main() { 国际年; 国际日; 字符串[]月=新字符串[]{“一月”、“二月”、“三月”、“四月”、“五月”、“六月”、“七月”、“八月”、“九月”、“十月”、“十一月”、“十二月”}; int[]天=新int[]{31,28,31,30,31,30,31,31,30,31,31}; Console.Write(“输入您希望生成日历的年份>>”; int.TryParse(Console.ReadLine(),out year);//验证// Console.Write(“输入1月1日在>>上的星期几”); int.TryParse(Console.ReadLine(),out day);//验证// while(day>31 | | day>”; Console.Write(“输入1月1日在>>上的星期几”); int.TryParse(Console.ReadLine(),out day);//验证// } switch(LeapYear(year))//switch语句检查闰年是否为真// { 大小写正确: 天数[1]+=1; Console.WriteLine(“日历年-{0}”,年份); for(int i=0;i,c#,windows,date,calendar,C#,Windows,Date,Calendar,首先,我必须说,您的操作过于复杂,有一个现成的完美日期库,您可以使用它。 例如: using System; using System.Text.RegularExpressions; namespace calendar { class Program { static void Main() { int year; int day; string[] month = ne

首先,我必须说,您的操作过于复杂,有一个现成的完美日期库,您可以使用它。 例如:

using System;
using System.Text.RegularExpressions;

namespace calendar
{
    class Program
    {
        static void Main()
        {
            int year;
            int day;
            string[] month = new string[] { "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" };
            int[] days = new int[] { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };

            Console.Write("Enter the year for which you wish to generate the calendar >> ");
            int.TryParse(Console.ReadLine(), out year); // Validate //

            Console.Write("Enter the day of the week that January first is on >> ");
            int.TryParse(Console.ReadLine(), out day); // Validate //
            while (day > 31 || day < 1) // Reprompt for value if date is out of range //
            {
                Console.WriteLine("Enter a valid date >> ");
                Console.Write("Enter the day of the week that January first is on >> ");
                int.TryParse(Console.ReadLine(), out day); // Validate //

            }

            switch (LeapYear(year)) // Switch statement checks if Leap Year is true //
            {
                case true:
                    days[1] += 1;
                    Console.WriteLine("Calendar for year - {0}", year);
                    for (int i = 0; i < month.Length; i++)   
                    {
                        Console.WriteLine("\n" + month[i]);
                        day = DisplayCalender(days[i], day);
                        Console.Write("\n");

                    }
                    break; 
            }
        }


            public static int DisplayCalender(int days, int start) //Display Function//
        {
            int startDay = start;

            Console.WriteLine("Sun\tMon\tTue\tWed\tThu\tFri\tSat");
            for (int i = 0; i < start; 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;

        }
        public static Boolean LeapYear(int year)
        {
            if ((year % 400 == 0) || ((year % 4 == 0) && !(year % 100 == 0))) // Checks each OR AND statements and return true or false //
            {
                return true;
            }
            else
                return false;
            }

        }
    }
与此相反:

DateTime now = DateTime.Now;
bool isLeapYear = DateTime.IsLeapYear(now.Year);
int daysInCurrentMonth = DateTime.DaysInMonth(now.Year, now.Month);
    Console.WriteLine("Sun\tMon\tTue\tWed\tThu\tFri\tSat");
    if (start < 7)
    {
        for (int i = 0; i < start; i++)
        {
            Console.Write("\t");
        }
    }
这样做:

if (startDay > 6)
{
  startDay = 0;
  Console.WriteLine();
}
所以DisplayCalendar方法应该如下所示:

        if (startDay > 6)
        {
            startDay = 0;
            if (i!=1)
            {
                Console.WriteLine();
            }                    
        }
public static int-displayCalendar(int-days,int-start)//显示功能//
{
int startDay=开始;
Console.WriteLine(“Sun\tMon\tTue\tWed\tThu\tFri\tSat”);
如果(开始<7)
{
对于(int i=0;i
我想你所描述的问题是,从周日开始的一个月会让日历跳过一整行。如图所示:

这是因为您的方法
publicstaticintdisplaycalender(intdays,intstart)
正在接收值为
7的参数
intstart
。 这使得你在第一个
中为
写下一周的标签,然后在第二个
中为
跳过这一行

要解决此问题,您只需在
7
时将
startDay
重新指定为零,然后在选项卡上检查
startDay
而不是
start

public static int DisplayCalender(int days, int start) //Display Function//
{
    int startDay = start;

    Console.WriteLine("Sun\tMon\tTue\tWed\tThu\tFri\tSat");
    if (start < 7)
    {
        for (int i = 0; i < start; i++)
        {
            Console.Write("\t");
        }
    }
    for (int i = 1; i <= days; i++)
    {
        if (startDay > 6)
        {
            startDay = 0;
            if (i != 1 )
            {
                Console.WriteLine();
            }
        }
        Console.Write(i + "\t");
        startDay++;
    }

    return startDay;
}
public static int-displayCalendar(int-days,int-start)//显示功能//
{
int startDay=start==7?0:开始;
Console.WriteLine(“Sun\tMon\tTue\tWed\tThu\tFri\tSat”);
对于(int i=0;i
这将为您提供预期的结果:

您可以从这里改进什么?

从头开始做这些可能会让你学到很多关于循环和流的知识。如果你有时间,请查查。 在这里,您可以找到闰年、星期几和月份。这将帮助您大大简化代码


欢迎来到StackOverflow

为什么不使用
DateTime
来确定某一年的一月一日是星期几?还有,一周中的一天怎么可能在1到31之间,不是应该是1到7吗?
public static int DisplayCalender(int days, int start) //Display Function//
{
    int startDay = start;

    Console.WriteLine("Sun\tMon\tTue\tWed\tThu\tFri\tSat");
    if (start < 7)
    {
        for (int i = 0; i < start; i++)
        {
            Console.Write("\t");
        }
    }
    for (int i = 1; i <= days; i++)
    {
        if (startDay > 6)
        {
            startDay = 0;
            if (i != 1 )
            {
                Console.WriteLine();
            }
        }
        Console.Write(i + "\t");
        startDay++;
    }

    return startDay;
}
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;
}