ref参数侧重于将一个变量以参数的形式带到一个方法中进行改变, 改变完成后,再讲改变后的值带出来。 在使用ref参数的时候需要注意:ref参数在方法外必须为其赋值。 |
|
demo: |
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;
namespace _02ref参数练习 { class Program { static void Main(string[] args) { //交换两个int类型的变量 int n1 = 10; int n2 = 20; //int temp = n1; //n1 = n2; //n2 = temp; //n1 = n1 - n2; //n2 = n1 + n2; //n1 = n2 - n1; //Console.WriteLine(n1); //Console.WriteLine(n2); // Change(out n1, out n2);
Change(ref n1, ref n2); Console.WriteLine(n1); Console.WriteLine(n2); Console.ReadKey(); }
public static void Change(ref int n1, ref int n2) { int temp = n1; n1 = n2; n2 = temp; } } }
|
demo: |
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;
namespace _03方法的重载 { class Program { static void Main(string[] args) { // Console.WriteLine() // M() }
public static void M(int n1, int n2) { int sum = n1 + n2; }
//public static int M(int n1, int n2) //{
//} public static double M(int n1, double n2) { return n1 + n2; } public static string M(string s1, string s2) { return s1 + s2; } public static void M(int n1, int n2, int n3) { int sum = n1 + n2 + n3; }
} }
|
方法的重载指的是方法的名称相同,但是参数不同。 参数不同: 1)、如果参数的个数相同,那么参数的类型就不能相同。 2)、如果参数的类型相同,那么参数的个数就不能相同。
方法的重载跟返回值没有关系。 |
|
可变参数必须形参列表中的最后一个元素 |
|
demo: |
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;
namespace _04可变参数数组 { class Program { static void Main(string[] args) { //求任意数字中的总和 // int[] s={98,79,65}; //GetScore("张三", 98, 79, 65,100,100); //Console.ReadKey(); // int[] n={1,2,3,4,5}; int sum = GetSum(1.5,2,3,4,5,6); Console.Write(sum); Console.ReadKey(); }
public static int GetSum(double d,params int[] nums) { int sum = 0; for (int i = 0; i < nums.Length; i++) { sum += nums[i]; } return sum; }
public static void GetScore(string name,int id ,params int[] score) { int sum = 0; for (int i = 0; i < score.Length; i++) { sum += score[i]; }
Console.WriteLine("{0}这次考试的总成绩是{1}", name, sum); }
} }
|
方法的递归 在方法内部自己调用自己 |
|
demo: |
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;
namespace _05递归 { class Program { static void Main(string[] args) { //方法的递归 在方法内部自己调用自己 //找一个文件夹下所有的文件 TellStory(); Console.ReadKey(); } public static int i = 0; public static void TellStory() { i++; Console.WriteLine("从前有座山"); Console.WriteLine("山里有个庙"); Console.WriteLine("庙里有个小和尚和老和尚"); Console.WriteLine("有一天,小和尚哭了,老和尚给小和尚讲了一个故事"); if (i >= 5) { return; } TellStory(); } } }
|
方法总结: |
1、作用:可以让代码重复的使用 2、参数:完成这个方法所必须要的条件 3、返回值:完成方法后,方法返回的结果 4、out参数:可以让方法返回多个值 5、ref参数:侧重于将一个变量带到方法中进行改变,改变完成后,再讲改变后的值带出去。 6、params可变参数:将实参列表中跟可变参数数组类型一样的参数当做是可变参数数组中的元素。 可变参数必须形参列表中的最后一个元素 7、方法的重载: 方法的名称相同,但是参数不同。跟返回值没关系。 参数不同: 1)、如果参数的个数相同,那么参数的类型就不能相同。 2)、如果参数的类型相同,那么参数的个数就不能相同。 8、方法的递归:自己在方法中调用自己。 |
|
mini-ex: |
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ex01 { /// /// 提示用户输入两个数字 计算这两个数字之间所有整数的和 ///1、用户只能输入数字 ///2、计算两个数字之间和 ///3、要求第一个数字必须比第二个数字小 就重新输入 /// class Program { static void Main(string[] args) { Console.WriteLine(inputNumber()); Console.ReadLine(); } public static int inputNumber() { loop: Console.WriteLine("Please input 1st number:"); string num1Str = Console.ReadLine(); Console.WriteLine("Please input 2nd number:"); string num2Str = Console.ReadLine(); int num1 = 0; int num2 = 0; int sum = 0; try { num1 = Convert.ToInt32(num1Str); } catch (Exception) { Console.WriteLine("Num1 must be int:"); } try { num2 = Convert.ToInt32(num2Str); } catch (Exception) { Console.WriteLine("Num2 must be int:"); } if (num1 > num2) { Console.WriteLine("Num2 must bigger than num1."); goto loop; } else { for (int i = num1; i <= num2; i++) { sum += i; } return sum; } } } }
|
Teacher’s answer: |
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;
namespace _06方法练习 { class Program { static void Main(string[] args) { //提示用户输入两个数字 计算这两个数字之间所有整数的和 //1、用户只能输入数字 //3、计算两个数字之间和 //2、要求第一个数字必须比第二个数字小 就重新输入 Console.WriteLine("请输入第一个数字"); string strNumberOne = Console.ReadLine(); int numberOne = GetNumber(strNumberOne); Console.WriteLine("请输入第二个数字"); string strNumberTwo = Console.ReadLine(); int numberTwo = GetNumber(strNumberTwo); Judge(ref numberOne,ref numberTwo); int sum = GetSum(numberOne, numberTwo); Console.WriteLine("{0}到{1}之间的总和是{2}", numberOne, numberTwo, sum); Console.ReadKey(); }
/// <summary> /// 获得一个整数 /// </summary> /// <param name="strNumber"></param> /// <returns></returns> public static int GetNumber(string strNumber) { while (true) { try { int number = Convert.ToInt32(strNumber); return number; } catch { Console.WriteLine("输入有误,请重新输入"); strNumber = Console.ReadLine(); } } }
public static void Judge(ref int n1,ref int n2) { while (true) { if (n1 < n2) { return; } else//n1>=n2 { Console.WriteLine("第一个数字不能大于第二个数字,请重新输入第一个数字"); string s1 = Console.ReadLine(); n1 = GetNumber(s1); Console.WriteLine("请重新输入第二个数字"); string s2 = Console.ReadLine(); n2 = GetNumber(s2); } }
} public static int GetSum(int n1, int n2) { int sum = 0; for (int i = n1; i <= n2; i++) { sum += i; } return sum; }
} }
|
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ex02 { /// /// 用方法来实现:有一个字符串数组:{ "马龙", "迈克尔乔丹", "雷吉米勒", "蒂姆邓肯", "科比布莱恩特" }, /// 请输出最长的字符串。 /// class Program { static void Main(string[] args) { string[] namesArr = {"马龙", "迈克尔乔丹", "雷吉米勒", "蒂姆邓肯", "科比布莱恩特"}; Console.WriteLine(getLongestName(namesArr)); Console.ReadLine(); } public static string getLongestName(string[] namesArr) { string resultString = ""; for (int i = 0; i < namesArr.Length; i++) { if (resultString.Length < namesArr[i].Length) { resultString = namesArr[i]; } } return resultString; } } }
|
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ex03 { /// /// 用方法来实现:请计算出一个整型数组的平均值。 /// class Program { static void Main(string[] args) { double[] inputArray = {3.14, 1.732, 2.5, 1.3}; Console.WriteLine(GetAverage(inputArray)); Console.ReadLine(); } public static double GetAverage(double[] inputArray) { double sum = 0; for (int i = 0; i < inputArray.Length; i++) { sum += i; } return sum/inputArray.Length; } } }
|
mini-ex: |
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;
namespace ex05 { /// <summary> /// 接受输入后判断其等级并显示出来。判断依据如下: /// 等级={优 (90~100分);良 (80~89分); /// 中 (60~69分);差 (0~59分);} /// </summary> class Program { static void Main(string[] args) { Console.WriteLine("Please enter the score:"); int score = 0; try { score = Convert.ToInt32(Console.ReadLine()); } catch (Exception) { Console.WriteLine("Not a number."); } Console.WriteLine(Judge(score)); Console.ReadLine(); }
public static string Judge(int score) { switch (score/10) { case 10: case 9: return "优"; break; case 8: return "良"; break; case 7: return "中上"; break; case 6: return "中"; break; default: return "差"; break; } } } }
|
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;
namespace ex06 { /// <summary> /// 请将字符串数组{ "中国", "美国", "巴西", "澳大利亚", "加拿大" }中的内容反转 /// </summary> class Program { static void Main(string[] args) { string[] nationalArray = {"中国", "美国", "巴西", "澳大利亚", "加拿大"}; string[] resultArray = ReverseArray(nationalArray); foreach (var s in resultArray) { Console.WriteLine(s); } Console.Read(); }
public static string[] ReverseArray(string[] inputArray) { string[] resultArray = new string[inputArray.Length]; for (int i = 0; i < inputArray.Length; i++) { resultArray[i] = inputArray[inputArray.Length - i - 1]; } return resultArray; } } }
|
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;
namespace ex07 { /// <summary> /// 写一个方法 计算圆的面积和周长 面积是 pI*R*R 周长是 2*Pi*r /// </summary> class Program { static void Main(string[] args) { Console.WriteLine("Input radius:"); double radius = 0.0; try { radius = Double.Parse(Console.ReadLine()); } catch (Exception) { Console.WriteLine("not a double"); } double[] resultArray = Calc(radius); Console.WriteLine("Area: {0:f2}, Length: {1:f2}。",resultArray[0],resultArray[1]); Console.ReadLine(); }
public static double[] Calc(double r) { double[] resultArray = new double[2]; resultArray[0] = Math.PI*r*r; resultArray[1] = Math.PI*2*r; return resultArray; } } }
|
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;
namespace ex08 { /// <summary> /// 计算任意多个数间的最大值(提示:params) /// </summary> class Program { static void Main(string[] args) { Console.WriteLine(Max(2,1,4,3,6,5)); Console.ReadLine(); }
public static int Max(params int[] arr) { int maxNum = arr[0]; for (int i = 0; i < arr.Length; i++) { if (maxNum < arr[i]) { maxNum = arr[i]; } } return maxNum; } } }
|
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;
namespace ex09 { /// <summary> /// 请通过冒泡排序法对整数数组{ 1, 3, 5, 7, 90, 2, 4, 6, 8, 10 }实现升序排序。 /// /// </summary> class Program { static void Main(string[] args) { int[] arr = {1, 3, 5, 7, 90, 2, 4, 6, 8, 10}; int[] sortedArr = BubbleSort(arr); foreach (var i in sortedArr) { Console.WriteLine(i); } Console.ReadLine(); }
public static int[] BubbleSort(int[] arr) {
for (int i = 0; i < arr.Length - 1; i++) { for (int j = 0; j < arr.Length - i - 1; j++) { if (arr[j] > arr[j+1]) { int temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } }
return arr; } } }
|
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;
namespace ex10 { /// <summary> /// 用方法来实现:请计算出一个整型数组的平均值。{ 1, 3, 5, 7, 93, 33, 4, 4, 6, 8, 10 }。 /// 要求:计算结果如果有小数,则显示小数点后两位(四舍五入)。 /// </summary> class Program { static void Main(string[] args) { int[] arr = {1, 3, 5, 7, 93, 33, 4, 4, 6, 8, 10}; Console.WriteLine("{0:f2}",GetAverage(arr)); Console.ReadLine(); }
public static double GetAverage(int[] arr) { int sum = 0; for (int i = 0; i < arr.Length; i++) { sum += arr[i]; } double ave = sum*1.0/arr.Length; return ave; } } } {0:f2}也可以是{0:0.00} avg = Convert.ToDouble(avg.ToString("0.00")); |
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;
namespace ex11 { /// <summary> /// 将一个字符串数组输出为|分割的形式,比如“梅西|卡卡|郑大世”(用方法来实现此功能) /// </summary> class Program { static void Main(string[] args) { string[] arr = {"梅西", "卡卡", "郑大世"}; string outputArr = AddString(arr); Console.WriteLine(outputArr); Console.ReadLine(); }
public static string AddString(string[] inputArr) { string outputStr = "";
for (int i = 0; i < inputArr.Length; i++) { if (i < inputArr.Length - 1) { outputStr += inputArr[i] + "|"; } else { outputStr+= inputArr[i]; } } return outputStr; } } }
|