zoukankan      html  css  js  c++  java
  • 小菜学try语句,又被trouble给catch住了

     

     今天,我写了一个读取整数的函数,如下:

    复制代码
    static int ReadInt(){
                int inputNum;
                bool IsNumber = false;
                do {
                    Console.WriteLine("请输入一个整数");
                    try {
                       inputNum = Convert.ToInt32(Console.ReadLine());
                       IsNumber = true;
                       return inputNum;
                    }
                    catch  {
                        Console.WriteLine("您的输入有误");
                    }   
                } while (IsNumber==false); 
            }
    复制代码

    结果编译错误,错误列表显示:并非所有代码路径都有返回值。
    就这样一个小小的问题就将我给困住了。虽然我懂得存在代码执行流程这么回事(控制流),但是写代码的时候就是联系不上理论知识,理所当然得忽略基础知识。最后我们家何同学告诉:程序中 当执行到try{IsNuber=true;}时候,就跳出循环,没有执行return语句。所以函数就没有返回值。我这才明白过来,我怎么就没想过程序的执行流程呢?于是,我就改了下代码:

    复制代码
    static int ReadInt(){
                int inputNum;
                bool IsNumber = false;
                do {
                    Console.WriteLine("请输入一个整数");
                    try {
                       inputNum = Convert.ToInt32(Console.ReadLine());
                       IsNumber = true;
                    }
                    catch  {
                        Console.WriteLine("您的输入有误");
                    }   
                } while (IsNumber==false);
                return inputNum;
            }
    复制代码

    结果编译又有错误,错误列表为:使用了为赋值的局部变量“inputNum”。我又成了丈二的和尚摸不着头脑。认为,明明inputNum变量在try里赋值了,怎么会没赋值呢?最后终于顿悟:若是我们输入一个非整数,程序会跳过Try语句,直接执行catch子句,这时候,inputNum就没有被赋值了。所以我将代码改成了:

    复制代码
    static int ReadInt(){
                int inputNum=0;
                bool IsNumber = false;
                do {
                    Console.WriteLine("请输入一个整数");
                    try {
                       inputNum = Convert.ToInt32(Console.ReadLine());
                       IsNumber = true;
                    }
                    catch  {
                        Console.WriteLine("您的输入有误");
                    }   
                } while (IsNumber==false);
                return inputNum;
            }
    复制代码

    那这次就对了。
    那其实更简洁的代码是:

    复制代码
           static int ReadInt(){
                do {
                    Console.WriteLine("请输入一个整数");
                    try {
                      int  inputNum = Convert.ToInt32(Console.ReadLine());
                       return inputNum;
                    }
                    catch  {
                        Console.WriteLine("您的输入有误");
                    }   
                } while (true);
            }
    复制代码

    从这次的错误当中,我学到了写代码之前要根据我们所需要实现的功能,设计好代码实现的流程。必须清楚代码的执行流程。不能没有步骤,笼统地将代码放在一块,而不去理会事情的先后顺序。
    (题外话:本人自学.Net开发技术,学习的大纲是以传智播客的网上视频教程为主,以及《headFires》等书籍为辅。整个教程从c#基础、面向对象编程、wpf、数据绑定和数据库基础、ADO.Net、html、javascript、JQuery、Ajax、ASP.Net都基本学完,并进行了总结和梳理。但最近找工作,简历都石沉大海,有去那么两三家公司面试,可能是因为项目经验欠缺,被拒了。后来去申请了黑马程序员培训班,现流程还未走完。在黑马群里,通过与他人交流,我发现我有一些重点知识有待加强,而且《c#基础知识加强》我没有学到过,因为之前不知道有渠道可以下载到,所以委托,接口,泛型等等都是通过看书来学习的,但是书本的知识主要偏重概念。很高兴最近下载到了《c#基础知识加强》视频。今天已经开始学习。以上的这个简单函数,其实之前在学习c#基础课程的时候,也是自己已经完成了的一个作业,但其实并没有透彻掌握基础,只是马马虎虎完成了作业,我想因此,留下了不少模糊问题吧。对此深感惭愧,又因为只是学过一遍,后期的课程当中讲解的知识点其实涉及的这方面的编程并不多,再加上没什么项目经验,所以现阶段算是对.Net开发有个系统全面的了解而已,并没有深入。所以任重而道远那。)

    附图1:   

    附图2:

    我叫小小菜,想要成为一棵大大包心菜.
  • 相关阅读:
    TextView中文文档
    低版本系统兼容的ActionBar(六)用Fragment+ViewPager+Tab实现快速导航
    低版本系统兼容的ActionBar(五)修改ActionBar的全套样式,从未如此简单过
    低版本系统兼容的ActionBar(四)添加Tab+添加自定义的Tab视图+Fragment
    低版本系统兼容的ActionBar(三)自定义Item视图+进度条的实现+下拉导航+透明ActionBar
    低版本系统兼容的ActionBar(二)ActionProvider+分离式ActionBar+分离式的ActionMode
    Android中获取屏幕长宽的方法
    低版本系统兼容的ActionBar(一)设置颜色+添加Menu+添加ActionMode
    用PopupWindow实现弹出菜单(弹出的菜单采用自定义布局)
    Android Studio 下载地址
  • 原文地址:https://www.cnblogs.com/tobecabbage/p/3432017.html
Copyright © 2011-2022 走看看