一、什么是方法(函数)?
函数就是将一堆代码进行重用的一种机制(就是将重复使用的的代码放在一个方法里,谁想用调就行了。)
比喻成职能。比喻成一个生产自行车老板,一个地方专门放螺丝,一个地方专门放轮,一个地方专门放车链子,需要组装什么就从那个仓库里面拿就行了。各司其职。
二、使用方法有什么好处呢?
便于修改、增加可读性、可重用、封装
三、语法:
访问修饰符 static 返回类型 方法名(参数列表)
四、实战演练
①、请用户输入两个数,判断两数的最大值
class Program { static void Main(string[] args) { Console.WriteLine("请输入第一个数"); //输入第一个数 int number1 = Convert.ToInt32(Console.ReadLine()); //接收用户输入内容,并转换为int类型 Console.WriteLine("请输入第二个数"); //输入第二个数 int number2 = Convert.ToInt32(Console.ReadLine()); //接收并转换为int类型 int max = Show(number1, number2); //调用Show()这个方法,有两个返回值 Console.WriteLine("最大的数是:{0}", max); //输出结果 Console.ReadKey(); } /// <summary> /// 此方法用来比较两个数的大小,返回的是最大值 /// </summary> /// <param name="num1">用来比较的第一个数</param> /// <param name="num2">用来比较的第二个数</param> /// <returns>返回的是最大值</returns> public static int Show(int num1, int num2) //static静态方法,方法名Show,有参数有返回值 { int number=num1> num2 ? num1 : num2; //判断两个数的大小 return number; //返回结果 } }
②、从一个整数数组中取出最大的整数、最小整数、总和、平均值
class Program { static void Main(string[] args) { int[] nums = new int[] { 1,2,3,4,5,6}; //定义一个int类型的数组nums ArrayNumbers(nums); //调用ArrayNumbers这个有参数的方法, Console.ReadKey(); } public static void ArrayNumbers(int[] num) //方法 { int max = int.MinValue; //定义一个变量max,用于判断最大值 int min = int.MaxValue; //定义一个变量min,用于判断最小值 int sum = 0; //定义一个整数变量,初始值为0 for (int i = 0; i < num.Length; i++) //遍历num这个数组 { if (num[i] > max) //如果遍历的这个值>最大值 { max = num[i]; //把这个值赋给变量max } if (num[i] < min) //如果遍历的这个值<最大值 { min = num[i]; //把这个值赋给变量min } sum += num[i]; //求和 } Console.WriteLine("最大值为:{0},最小值为{1},和为{2},平均分为{3}", max, min, sum, sum / num.Length); //在控制台输出结果 } }
③、计算一个整数数组的所有元素的和
class Program { static void Main(string[] args) { int[] nums = new int[] { 1, 2, 3, 4, 5, 6 }; //定义一个整型数组nums int sum = ArraySum(nums); //调用方法ArraySum Console.WriteLine("和为:{0}",sum); //在控制台输出结果 Console.ReadKey(); } public static int ArraySum(int[] num) //有返回值的整型方法 { int sum = 0; //变量,求和 for(int i = 0; i < num.Length; i++) //遍历num这个数组 { sum += num[i]; //对数组元素的和进行累加 } return sum; //返回 } }
④、数组里面都是人的名字,分割成:例如:贝拉|爱德华|雅各布……
class Program { static void Main(string[] args) { string[] names = new string[] { "贝拉", "爱德华", "雅各布","安妮" }; //string类型数组names ArrayNames(names); //调用ArrayNames这个方法 Console.ReadKey(); } public static void ArrayNames (string[] name) //方法 { string str = ""; //定义一个string类型变量,用于盛放添加字符之后的字符串 for (int i = 0; i < name.Length-1; i++) //遍历数组, { str += name[i] + "|"; //循环给每个元素后面加“|” } Console.WriteLine(str+name[name.Length-1]); //输出变换后的字符串 } }
⑤、将一个整数数组的每一个元素进行如下的处理:
如果元素是正数则将这个位置的元素的值+1;
如果元素是负数则将这个位置的元素的值-1;
如果元素是0,则不变
class Program { static void Main(string[] args) { int[] nums = new int[] { 1, 2, 3, 4, 5, 6 }; //定义一个int型变量nums ArrayNumber(nums); //调用ArrayNumber这个方法 Console.ReadKey(); } public static void ArrayNumber(int[] num) //方法 { for(int i = 0; i< num.Length; i++) //遍历进行判断 { if(num[i] > 0) //如果这个元素>0 { num[i]++; //+1 } if (num[i] < 0) //如果这个元素<0 { num[i]--; //—1 } } for (int i = 0; i < num.Length; i++) //遍历数组num { Console.Write(num[i] + "\t"); //在控制台输出结果 } } }
⑥、将一个字符串数组的元素的顺序进行反转
{”我“,”是“,“好人”}{”好人“,”是“,”我“}。第i个和第length-i-1个进行交换
class Program { static void Main(string[] args) { string[] str = new string[] { "我", "是", "好人" }; //定义一个string类型变量 ArrayForr(str); //调用ArrayForr这个方法 Console.ReadKey(); } public static void ArrayForr(string[] num) //static静态方法,无返回值 { Array.Sort(num); //Array类,用于对数组元素进行排序 for (int i = 0; i < num.Length; i++) { Console.Write(num[i] + "\t"); //在控制台输出结果 } } }
五、ref和out传参的区别
|
out |
ref |
赋初值(方法体内) |
必须 |
不一定(方法内赋初值了,Main可不赋初值;方法内没赋初值,Main必须赋初值) |
调用时采用的值 |
方法内传来的 |
方法内赋初值:采用方法内的值 方法内没赋初值:采用Main函数的 |
调用 |
方法名(out 参数) |
方法名(ref 参数) |
①、out的传参:
②、ref的传参:
第一种情况:方法体内没有赋初值
第二种情况:方法体内赋初值了
六、方法的重载
一同二不同(方法名相同,参数个数不同,类型也不同)
①、判断输入的一个数是不是质数
//质数,除了1和它自身外,不能被其他自然数整除的数 Console.WriteLine("请输入一个数"); //在控制台提示输入数字 int numb = Convert.ToInt32(Console.ReadLine()); //接收用户输入的内容 bool result = ZhiShu(numb); //定义bool类型的变量,接收调用ZhiShu方法传回来的内容 string shu = result == true ? "是质数" : "不是质数"; //判断是不是质数 Console.WriteLine(shu); //在控制台输出 Console.ReadKey(); public static bool ZhiShu(int number) { for (int i = 2; i < number; i++) //for循环,2是最小的质数 { if (number % i == 0) //如果输入的这个数和i整除=0 { return false; //则返回false,不是质数 } } return true; //否则,返回true,是质数 }
②、用方法实现int类型,找最大值,最小值
int[] numbers = { 1, 2, 3, 4, 5, 6, 7 }; //定义numbers数组并且赋初值 int max; //最大值 int min; //最小值 FirstNumber(numbers, out max, out min); //调用FirstNumber方法, Console.WriteLine("最大值为{0}", max); //输出最大值结果 Console.WriteLine("最小值为{0}", min); //输出最小值结果 Console.ReadKey(); public static void FirstNumber(int[] nums, out int first, out int last) { first = int.MinValue; //最大值 last = int.MaxValue; //最小值 for (int i = 0; i < nums.Length; i++) //for循环 { if (nums[i] > first) //如果数字>最大值 { first = nums[i]; //最大值 } if (nums[i] < last) //如果数字<最大值 { last = nums[i]; //最小值 } } }
③、实现MyTryParse功能,找最大值,最小值
Console.WriteLine("请输入一个数字"); string strNumber = Console.ReadLine(); int num; bool result = Program.MyTryParse(strNumber, out num); bool result1 = int.TryParse(strNumber, out num); public static bool MyTryParse(string s, out int result) //此方法中有out参数,所以需要给它赋初值 { result = 0; try //try catch语句 { result = Convert.ToInt32(s); return true; } catch { return false; } }
④、用户只能输入0到100之间的数写一个方法,否则提示超出范围
Console.WriteLine("请输入1-100之间数字"); //提示用户输入 bool result = GetNumber(Console.ReadLine()); //接收用户输入内容,调用GetNumber方法判断输入是否在范围内 if (result ) //如果范围为true { Console.WriteLine("在范围内"); //在范围内 } else //否则 { Console.WriteLine("不在范围内"); //不在范围内 }
public static bool GetNumber(string str) //判断用户输入的数字范围是否正确 { int number = OutNumber(str); //调用OutNumber方法,判断输入 if (number >= 0 && number < 100) //如果输入的数字在0-100之间 { return true; //则返回true } else //否则 { return false; //返回false } }
public static int OutNumber(string s) //此方法中有out参数,所以需要给它赋初值 { while (true) { try //try catch语句 { int number = Convert.ToInt32(s); //将接收到的内容转换为int类型 return number; //如果可以转换为int类型,则返回数值 } catch //如果报异常 { Console.WriteLine("输入错误,请重新输入"); s = Console.ReadLine(); } } }