今天去面试碰到一个C#编程题,写一个方法返回某一年的所有工作日,当时没写出来,因为对System.DateTime这个结构体的一些方法和属性不熟。不过脑子里想了个大概,觉得这个struct总会有对应的方法和属性去实现这个功能的。当时想的是输入int型的年份数据,输出string[]数组。回家后研究了一下System.DateTime,于是写了如下方法
Code
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事件中,调用代码如下:
Code
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很常用,但是我没用多久。。。唉