以交错数组形式返回指定年份各月的工作日的方法

本文介绍了一个C#方法,该方法接收一个整数类型的年份作为参数,并返回该年每个月的工作日数组。作者在面试中遇到此问题,通过使用System.DateTime结构体实现了功能。

今天去面试碰到一个C#编程题,写一个方法返回某一年的所有工作日,当时没写出来,因为对System.DateTime这个结构体的一些方法和属性不熟。不过脑子里想了个大概,觉得这个struct总会有对应的方法和属性去实现这个功能的。当时想的是输入int型的年份数据,输出string[]数组。回家后研究了一下System.DateTime,于是写了如下方法

 

ContractedBlock.gifExpandedBlockStart.gifCode
        private int[][] GetYearWorkday(int year)
        {
            
int[][] arr_workdays = new int[12][];
            
for (int month = 1; month <= 12; month++)
            {
                DateTime var_Month_DT 
= DateTime.Parse(String.Format("{0}-{1}-{2}", year, month, "1"));
                ArrayList al 
= new ArrayList();
                
for (int day = 1; day <= DateTime.DaysInMonth(var_Month_DT.Year, var_Month_DT.Month); day++)
                {
                    DateTime var_Day_DT 
= DateTime.Parse(String.Format("{0}-{1}-{2}", year, month, day));
                    
int dayofweek = (int)var_Day_DT.DayOfWeek;
                    
if (dayofweek >= 1 && dayofweek <= 5)
                    {
                        al.Add(var_Day_DT.Day);
                    }
                }
                arr_workdays[month 
- 1= new int[al.Count];
                al.CopyTo(arr_workdays[month 
- 1]);
            }
            
return arr_workdays;
        }

 

交错数组其实就是数组的数组,父数组的每一个元素就是一个数组(子数组),子数组的长度可不一致,用作这个方法的返回值再好不过了,因为每个月的工作日数量不会都相同。(PS:如果子数组的长度都相同,那还是用二维数组好一点)

 

然后调用,我这里是在WinForm的Form1_Load事件中,调用代码如下:

ContractedBlock.gifExpandedBlockStart.gifCode
            int year = 2009;
            
int[][] show = GetYearWorkday(year);
            textBox1.Text 
+= year + "年各月份的工作日如下:";
            textBox1.Text 
+= "\r\n";
            
for (int m = 1; m <= 12; m++)
            {
                textBox1.Text 
+= m + "月:";
                
foreach (int i in show[m - 1])
                {
                    textBox1.Text 
+= i + ",";
                }
                textBox1.Text 
+= "\r\n";
            }

就这样解决了这个问题,我觉得在面试中考这个真不应该,谁记得住这么多命名空间这么多类、结构中的方法和属性啊,写伪代码得了。。。虽然System.DateTime很常用,但是我没用多久。。。唉

转载于:https://www.cnblogs.com/lazyman/archive/2009/10/29/1592644.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值