?1.什么是方法?
2.语法:
?在自定义方法时,我们需要注意的是,返回的数据必须与返回值类型兼容。比如返回值类型是float类型,我们就可以返回float类型也可以返回int类型。比如下面的一段代码:
public float addOp(int a, int b)
{
int c = a + b;
return c;
}
*return后面的语句不再执行。
*没有返回值的方法也可以写return,不过后面不能又任何东西。
3.返回值类型:
4.参数:
?
?下面我们来做一个实例:
利用控制台做一个类似系统右下角的日历。达到下面的效果:
?自己尝试制作完,可以参考一下下面的代码。
public static int startYear = 1999;
public static int startWeekDay = 5;
public static int getTotalDays(int year)
{
int yearStep = startYear;
int yearDays = 0;
for (int i = year - startYear; i >= 0; i--)
{
if (yearStep % 4 == 0)
{
yearDays += 366;
}
else
{
yearDays += 365;
}
yearStep++;
}
return yearDays;
}
public static int getCertainMDay(int year, int mouth)
{
int dayNum = 0;
switch (mouth)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
{
dayNum = 31;
break;
}
case 4:
case 6:
case 9:
case 11:
{
dayNum = 30;
break;
}
case 2:
{
if (year % 4 == 0)
{
dayNum = 29;
break;
}
else
{
dayNum = 28;
break;
}
}
default:
break;
}
return dayNum;
}
public static int getFirstDayInWeekDay(int year)
{
if (year == 1999)
{
return startWeekDay;
}
else
{
int totalDays = getTotalDays(year - 1);
int outDaysNum = totalDays % 7;
if (outDaysNum + 8 - startWeekDay > 7)
{
outDaysNum = outDaysNum - 7;
}
return outDaysNum + startWeekDay;
}
}
public static void showDate(int year)
{
int startWeekDay = getFirstDayInWeekDay(year);
int beginDay = getFirstDayInWeekDay(year), endDay = 0;
for (int i = 0; i < 12; i++)
{
Console.WriteLine("当前年份为:" + year + " 当前月份为:" + (i + 1));
Console.WriteLine("周一\t周二\t周三\t周四\t周五\t周六\t周日");
int step7 = 0;
string dateLine = "";
bool firstLineFlag = true;
for (int i1 = 0; i1 < getCertainMDay(year, i + 1); i1++)
{
//初始几个日期
if (beginDay != 0 && firstLineFlag == true)
{
for (int i3 = 0; i3 < beginDay - 1; i3++)
{
dateLine = dateLine.Insert(dateLine.Length, " \t");
}
for (int i4 = 0; i4 < 8 - beginDay; i4++)
{
string str1 = (i4 + 1) >= 10 ? (i4 + 1).ToString() + " \t" : (i4 + 1).ToString() + " \t";
dateLine = dateLine.Insert(dateLine.Length, str1);
}
dateLine = dateLine.Insert(dateLine.Length, "\n");
i1 += (8-beginDay);
firstLineFlag = false;
}
//中部几排日期
if (step7 == 7)
{
dateLine = dateLine.Insert(dateLine.Length, "\n");
step7 = 0;
}
string str2 = (i1 + 1) >= 10 ? (i1 + 1).ToString() + " \t" : (i1 + 1).ToString() + " \t";
dateLine = dateLine.Insert(dateLine.Length, str2);
step7++;
}//每月天数循环
endDay = (getCertainMDay(year, i + 1) + (beginDay - 1)) % 7;
beginDay = endDay+1;
Console.Write(dateLine+"\n\n");
}//月循环
}
上面是方法的简单了解,下面我们来思考一个问题,writeline方法是如何做到输出不同类型的值的呢?
static void Main(string[] args)
{
Console.WriteLine(getSecondByDaysHoursAndMinutes(2, 1.5f, 37));
//下面我们制作一个通过天、小时、分钟,获得总秒数的小程序。
static float getSecondByDaysHoursAndMinutes(float day, float hour, float minute)
{
return minute * 60 + hour * 60 * 60 + day * 24 * 60 * 60;
}
}
5.上面的一串代码,用于根据天数、小时数、分钟数来计算总秒数。如果我想计算小时数和分钟数而得出总秒数,或者是单独的计算多少分钟或是多少小时得到的总秒数等。
这样,我们需要写很多方法借用很多方法名,从而使程序员需要记住多个方法。
那么怎么解决这个问题呢?——重载方法。
?
static void Main(string[] args)
{
Console.WriteLine(getSecondByTimes(2.1F, 1.5F, 37.1F));
//下面我们制作一个通过天、小时、分钟,获得总秒数的小程序。
}
public static float getSecondByTimes(float day, float hour, float minute)
{
return minute * 60 + hour * 60 * 60 + day * 24 * 60 * 60;
}
public static float getSecondByTimes(float day)
{
return day * 24 * 60 * 60;
}
public static double getSecondByTimes(double hour)
{
return hour * 60 * 60;
}
public static float getSecondByTimes(int minute)
{
return minute * 60;
}
这是一个简单的例子。
6.递归:
不用循环做一个阶乘的方法?
static void Main()
{
Console.WriteLine(getFactorial(3));
}
public static int getFactorial(int num)
{
if (num <= 1)
{
return num;
}
return num * getFactorial(num - 1);
}
?
|