主要内容
- 异常捕获
异常捕获
- 异常: 语法上没有错误, 在程序运行过程中, 由于某些原因程序出了问题, 不能再正常运行
- 出现异常很正常, 当我们知道程序中有可能出现异常时
为了让程序更加坚强一些(不容易出现异常), 应当在程序中经常性地使用try-catch来进行异常捕获哪行代码有可能出现异常, 就踹(try)他一脚
try
{
有可能会出现异常的代码
}
catch
{
出现异常时运行的代码
}
- 执行过程: try中的代码没有异常, 那么catch中的代码不会执行;
如果catch中出现异常, 那么后面的代码全部不运行, 直接跳到catch中执行代码记得多用异常捕获, 让异常和没异常一样
变量的作用域
- 变量的作用域就是变量能使用的范围
- 变量的作用域一般从声明变量的那一行开始, 一直到声明所在的花括号对应的结束花括号结束
- 在变量的作用域的范围之内, 我们可以访问并使用变量, 超出这个范围就访问不到了
switch-case 结构
- swich-case用来处理多条件的定值的判断
- 语法:
switch(变量或表达式的 值)
{
case 值1: 要执行的代码;
break;
case 值2: 要执行的代码;
break;
case 值3: 要执行的代码;
break;
default: 要执行的代码;
break;
}
- 执行过程:
- 先计算 变量或表达式的 值
- 拿这个返回的值依次和每个case后面带的值进行匹配
- 匹配成功就执行该case的代码
- 执行完成遇到break跳出该结构
- 如果均不匹配, 就看是否有default
- 如果有default, 就执行该代码
-
如果没有, 无事发生
-
注意: case后面的值 和 switch的变量 的类型要一致
练习
- 题目1: >=90 A档; [80,90) B档; …<60E档; 用switch-case做
Console.WriteLine("请输入考试成绩(100以内的正整数)");
int score = Convert.ToInt32(Console.ReadLine());
switch (score / 10)
{
case 10:
case 9:
Console.WriteLine("A");
break;
case 8:
Console.WriteLine("B");
break;
case 7:
Console.WriteLine("C");
break;
case 6:
Console.WriteLine("D");
break;
default:
Console.WriteLine("E");
break;
}
Console.ReadKey();
注意: case 10和case 9后的代码完全一样, 因此可以简写
- 题目2: 请用户输入年份 和 月份, 输出该月的天数(结合闰年)
//接收
Console.WriteLine("请输入一个年份");
try
{
int year = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("请输入一个月份");
try
{
int month = Convert.ToInt32(Console.ReadLine());// 可能性 1-12
//声明变量
int day = 0;
if (month >= 1 && month <= 12)
{
switch (month)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
day = 31;
break;
case 2:
//有平年闰年之分
bool b = (year % 400 == 0) || (year % 4 == 0 && year % 100 != 0);
if (b)
{
day = 29;
}
else
{
day = 28;
}
break;
default:
day = 30;
break;
} //switch的括号
Console.WriteLine("{0}年{1}月有{2}天", year, month, day);
} //if判断的括号
else
{
Console.WriteLine("输入月份不符合要求, 程序退出");
}
} //try月份的括号
catch //和月份的try配对
{
Console.WriteLine("输入月份有误, 程序退出");
}
} //try年份的括号
catch //和年份的try配对
{
Console.WriteLine("输入的年份有误, 程序退出");
}
Console.ReadKey();
总结&反思
写代码的时候切忌: 不要边写边想异常, 这样只会乱套
全篇写完, 正常功能运行成功, 再回头做异常处理
全局考虑异常