zhyDaDa的个人站点

主要内容

  • 异常捕获

异常捕获

  • 异常: 语法上没有错误, 在程序运行过程中, 由于某些原因程序出了问题, 不能再正常运行
  • 出现异常很正常, 当我们知道程序中有可能出现异常时
    为了让程序更加坚强一些(不容易出现异常), 应当在程序中经常性地使用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();

总结&反思
写代码的时候切忌: 不要边写边想异常, 这样只会乱套
全篇写完, 正常功能运行成功, 再回头做异常处理
全局考虑异常

Avatar photo
我是 zhyDaDa

前端/UI/交互/独立游戏/JPOP/电吉他/游戏配乐/网球/纸牌魔术

发表回复