今天我们来分享一下VS视频中第二组第二讲的内容,这一讲对数组进行了再次的深入练习,并简单的介绍了异常处理的代码,以及方法的使用、局部变量与全局变量。
一、概念类
①、什么是方法?
一个方法是把一些相关的语句组织在一起,用来执行一个任务的语句块。每一个C#程序至少有一个带有Main方法的类。
要使用一个方法,我们需要:定义方法,调用方法。
②、什么是方法的重载?
方法重载就是方法名称重复,加载参数不同。
③、为什么要使用方法?
代码的复用,功能的复用。
④、什么是堆栈?
堆和栈的区别可以用如下的比喻来看出:
使用栈就象我们去饭馆里吃饭,只管点菜(发出申请)、付钱、和吃(使用),吃饱了就走,不必理会切菜、洗菜等准备工作和洗碗、刷锅等扫尾工作,他的好处是快捷,但是自由度小。
⑤、堆与栈的区别?
堆栈空间分配区别:
1、栈(操作系统):由操作系统自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈;
2、堆(操作系统): 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收,分配方式倒是类似于链表。
堆栈缓存方式区别:
1、栈使用的是一级缓存, 他们通常都是被调用时处于存储空间中,调用完毕立即释放;
2、堆是存放在二级缓存中,生命周期由虚拟机的垃圾回收算法来决定(并不是一旦成为孤儿对象就能被回收)。所以调用这些对象的速度要相对来得低一些。
堆栈数据结构区别:
堆(数据结构):堆可以被看成是一棵树,如:堆排序;
栈(数据结构):一种先进后出的数据结构。
拓展详情:https://zhidao.baidu.com/question/1238648103637534499.html?fr=iks&word=%B6%D1%D5%BB&ie=gbk
⑤、catch 中throw 与throw ex 区别?
throw ex 这种写法会让C#重置异常的抛出点,throw并不会让C#重置异常的抛出点。
拓展详情:https://www.cnblogs.com/OpenCoder/p/6208284.html
⑥、try..catch..finally..语句处理流程?
try块出现异常则执行catch块的模块,然后再走到finally块。如果try块无异常则直接走到finally块。
⑦、在C语言中,局部变量与全局变量的区别?
局部变量只在本函数范围有效,在此函数以外不能使用这些变量;全局变量的有效范围则是从定义变量的位置开始到本源文件结束。全局变量是在整个程序都可以调用的变量,而局部变量只能在声明的函数里调用。
局部变量时程序运行到该函数时给该变量分配内存空间,函数结束则释放该内存空间;全局变量时程序运行时事先分配内容空间,当程序结束时释放内存。
二、导图类
三、代码类
①、数组的反转,倒序(Array方法,forr(for 循环的倒输出))
int[] nums = new int[] { 5, 2, 102, -5, 98 };
Array.Sort(nums); //一段代码就搞定了冒泡排序中的很多代码,从小到大
Array.Reverse(nums); //对数组nums进行反转,其结果从大到小,但并非从大到小排序
for (int i = 0; i < nums.Length; i++)
{
Console.Write(nums[i] + "\t");
}
for (int i = nums.Length - 1; i >= 0; i--) //forr倒着输出,最后的结果为从大到小
{
Console.Write(nums[i] + "\t"); //在控制台上写入内容,并添加制表符
}
Console.ReadKey();
②、字符串数组的分割
例:对字符串数组进行分割,最终分割的格式为:路飞|索隆|娜美|乔巴|罗宾|乌索普...
//对字符串数组进行分割,最终的格式为:路飞|索隆|娜美|乔巴|罗宾|乌索普...
static void Main(string[] args)
{
string[] haiZei = new string[] { "路飞", "索隆", "娜美 ", "乔巴", "罗宾", "乌索普" }; //从方法里移动过来的,具有具体赋值的变量,变量名称要更改
Program.StringName(haiZei); //调用StringName方法,并将数组haiZei中的内容传递给方法
Console.ReadKey();
}
public static void StringName(string[] names)
{
//数组里面都是人的名字,分割成:
string str = ""; //定义字符串变量
{
str += names[i] + "|"; //str=str+names[i]+"|"
}
Console.WriteLine(str + names[names.Length - 1] + "...");//在控制台上写入
Console.ReadKey();
}
③、用方法判断是否为闰年
Console.WriteLine("请输入年份");
int year = Convert.ToInt32(Console.ReadLine());
bool result=RunNian(year);
if (result) //如果result为true
{
Console.WriteLine("该年份为闰年"); //那么在控制台写入:该年份为闰年
}
else //否则
{
Console.WriteLine("该年份不是闰年"); //控制台写入:该年份不是闰年
}
Console.ReadKey();
}
public static bool RunNian(int year)
{ //我的方法
bool result1 = year % 400 == 0; //定义布尔值result1,year除以400余数为零
bool result2 = year % 4 == 0 && year % 100 != 0;//定义布尔值result2,year除以4余数为零,且除以100余数不为零
bool result = result1 || result2; //定义布尔值result,result1或者result2即可
return result;
//老师的方法:区别在于,老师把能简化到一行的代码都简化了,化繁为简!
if(year % 400 == 0 || year % 4 == 0 && year % 100 != 0)
{
return true;
}
else
{
return false;
}
④、传来字符串,返回数字
class Program
{
static void Main(string[] args)
{
Console.WriteLine("请输入内容"); //在控制台上写入内容
string str = Console.ReadLine(); //从控制台上读取信息,并将其赋予给str变量
int num=OutPutNumber(str); //调用OutPutNumber方法,并将参数传递给该方法。方法返回值将内容赋予给变量num
Console.WriteLine(num); //在控制台上写入变量num的内容
Console.ReadKey();
}
public static int OutPutNumber(string strNumber)
{
while(true) //不知道要循环多少遍时,用while(true)
{
try //尝试的进行下面的代码
{
int number = int.Parse(strNumber); //将从主函数中传递过来的参数进行类型转换
return number; //如果正确,则返回number。如果上面语句出错则直接跳转到catch中,根本不执行return number;
}
catch //如果抓取到错误,那么就执行以下大括号代码段
{
Console.WriteLine("输入错误,请重新输入"); // 在控制台上写入内容
strNumber = Console.ReadLine(); //重新将输入的内容赋予变量
}
//然后再从try开始循环
}
}
}
⑤、try...catch...finally语句
public static void Show() //静态,在本类中调这个方法,可以直接方法名(),就可以使用。
{
Console.WriteLine("请输入数字");
try //尝试走此段代码
{
int num = Convert.ToInt32(Console.ReadLine()); //将用在在控制台输入的内容转换为整数类型
}
catch (Exception ex) //如果正确则跳过此过程,向下继续执行,如果错误则执行此过程
{
//console.writeline(ex.message); //提示系统错误信息
//console.writeline("您输入的类型有误,请您输入数字"); //提示用户自定义错误信息
throw; //直接跳过catch这段,进行下一段代码
}
finally //无论是否出现异常,都执行此段代码
{
Console.ReadKey();
Console.ReadLine();
Console.WriteLine();
}
}
⑥、用方法求最大值,最小值,平均数,平均数
class Program
{
static void Main(string[] args)
{
//从一个整数数组中取出最大的整数,最小的整数,总和,平均值
int[] number = new int[] { 5, 10, 25, 90, -5, 0 };
int max = MaxArray(number); //调用最大值的方法
int min = MinArray(number); //调用最小组的方法
int avg = AvgArray(number); //调用平均数的方法
int sum = SumArray(number); //调用求和方法
Console.WriteLine("最大数为{0},最小数为{1},和为{2},平均数为{3}",max,min,avg,sum);
Console.ReadKey();
}
public static int MaxArray(int[] nums) //最大值方法
{
int max = int.MinValue; //定义最大值变量,为整数中的最小值
for (int i = 0; i < nums.Length ; i++) //for循环
{
max = nums[i] > max ? nums[i]:max; //如果数组nums[i]大于max变量,那么将数组nums[i]的值赋予给max变量,反之则将max赋值给max
}
return max; //返回max变量的值
}
public static int MinArray(int[] nums) //最小值方法
{
int min = int.MaxValue; //定义最小值变量,为整数中的最大值
for (int i = 0; i < nums.Length; i++)
{
min = nums[i] < min ? nums[i] : min;//如果数组nums[i]小于min变量,那么将数组nums[i]的值赋予给min变量,反之则将min赋值给min
}
return min; //返回max变量的值
}
public static int AvgArray(int[] nums) //平均数方法
{
int avg = 0; //定义变量,并赋予其初值
int sum = 0;
for (int i = 0; i < nums.Length; i++)
{
sum += nums[i]; //sum=sum+nums[i]
}
avg = sum / nums.Length; //平均数等于总和除以数组长度
return avg; //返回avg变量的值
}
public static int SumArray(int[] nums) //求和方法
{
int sum = 0;
for (int i = 0; i < nums.Length; i++)
{
sum += nums[i]; //sum=sum+nums[i]
}
return sum; //返回sum变量的值
}
}