今天,我写了一个读取整数的函数,以下:javascript
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语句。因此函数就没有返回值。我这才明白过来,我怎么就没想过程序的执行流程呢?因而,我就改了下代码:html
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就没有被赋值了。因此我将代码改为了:java
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:编程