黑马程序员技术交流社区

标题: 黑马程序员_谭光洪_try catch用来控制输入时 [打印本页]

作者: FrancisTan    时间: 2014-7-4 19:31
标题: 黑马程序员_谭光洪_try catch用来控制输入时
本帖最后由 FrancisTan 于 2014-7-9 08:00 编辑
  1. static void Main(string[] args)
  2. {
  3.        Console.WriteLine("请输入一个数字:");
  4.       
  5.        int num = 0; //接收键盘输入的值
  6.        bool isNumOrNot = false; //标记输入的值是否为数字

  7.        while(!isNumOrNot)
  8.        {
  9.               try
  10.               {
  11.                      num = Convert.ToInt32(Console.ReadLine());
  12.                      isNumOrNot = true;
  13.               }
  14.       
  15.               catch
  16.               {
  17.                      Console.WriteLine("您的输入有误,请重新输入!");
  18.                      isNumOrNot = false;
  19.                      Console.ReadKey();
  20.                      Console.Clear();
  21.               }
  22.         }
复制代码

这是在视频中跟老师学的一段代码,它解决了我对输入控制的困惑。
在这之前遇到那种要求输入值的题目时,就觉得很疑惑,题目要求输入数字或者字母,
那万一要是输入错误呢?答案显而易见的,程序执行错误。
那时候就在想是不是能有一种方法能解决这个问题,果然,坚持看下去就找到了。

记得老师说过,这样的代码才比较安全。
我的理解就是让程序有了自我检测的功能,能让它更加健状。

鉴于这个方法比较常用,老师还推荐我们将它封装成一个方法,用来从键盘输入整数。
下面是我自己封装的代码:
  1. public int ReadInt()
  2. {
  3.        int num = 0;
  4.        bool isNumOrNot = false;

  5.        while(!isNumOrNot)
  6.        {
  7.               try
  8.               {
  9.                      num = Convert.ToInt32(Console.ReadLine());
  10.                      isNumOrNot = true;
  11.                }
  12.                catch
  13.                {
  14.                       Console.WriteLine("输入有误,请重新输入!");
  15.                       isNumOrNot = false;
  16.                       Console.ReadKey();
  17.                }
  18.        }
  19.       
  20.         return num;
  21. }
复制代码


以后再需要从键盘输入一个数字的时候,就不用再去重复写这段代码了,可以直接重用了,非常方便。


作者: 向晓伟    时间: 2014-7-4 20:06
后面要写10篇blog 你可以把这些写到blog里面。当作学习的历程!
作者: FrancisTan    时间: 2014-7-4 20:17
向晓伟 发表于 2014-7-4 20:06
后面要写10篇blog 你可以把这些写到blog里面。当作学习的历程!

蒽,谢谢,我正在这样做,就是不知道合不合格,呵呵
不过这个流程还是挺有意思的,写完几篇后,比看几个小时视频收获都大!
看视频会头痛,写这个老精神了不犯困。
对了,你也是在准备报名吗?
作者: 绿箭    时间: 2014-7-4 20:40
{:3_46:}小伙伴习惯很好啊
作者: 向晓伟    时间: 2014-7-4 21:04
FrancisTan 发表于 2014-7-4 20:17
蒽,谢谢,我正在这样做,就是不知道合不合格,呵呵
不过这个流程还是挺有意思的,写完几篇后,比看几个 ...

但是blog不是写在这的呀。写到新浪,163,csdn,博客园这些地方~
作者: 渐渐的起飞    时间: 2014-7-4 22:54
占个位置,先看看
作者: 小郭zaiheima    时间: 2014-7-5 08:52
坐下来喝杯茶水,继续聊
作者: SunshineGirl    时间: 2014-7-5 09:07
给一分鼓励分。
作者: continue     时间: 2014-7-5 17:06
这段代码给你的建议,可以尝试用 int.TryParse 来做
作者: FrancisTan    时间: 2014-7-5 18:46
黑马蔡红微 发表于 2014-7-5 09:07
给一分鼓励分。

谢谢老师给的鼓励分,我会努力学习的!
作者: FrancisTan    时间: 2014-7-5 18:48
continue  发表于 2014-7-5 17:06
这段代码给你的建议,可以尝试用 int.TryParse 来做

哎呀,这个东西没见过耶前辈,不懂!
我只是把从视频中学到的东西写出来,以巩固自己所学,很有效哦!
作者: liangdmaster    时间: 2014-7-7 00:05
非常好,引用一下
作者: cleader    时间: 2014-7-7 18:20
我感觉while()可以换成do while().
这里开头用while()没什么用,但是也不会出错,只是少了一次判断。
从理论上说会更快一点点。
作者: FrancisTan    时间: 2014-7-7 19:08
cleader 发表于 2014-7-7 18:20
我感觉while()可以换成do while().
这里开头用while()没什么用,但是也不会出错,只是少了一次判断。
从理 ...

蒽,好建议,现在我也知道这东西是不能乱用的了哈哈,不过还是蛮有用的!
作者: czwanglei    时间: 2014-7-8 23:58
你好,当有人回复后,请及时把帖子编辑为提问结束,这样,版主才给你加技术分

作者: FrancisTan    时间: 2014-7-9 07:59
czwanglei 发表于 2014-7-8 23:58
你好,当有人回复后,请及时把帖子编辑为提问结束,这样,版主才给你加技术分
...

哦,谢谢你了
作者: czwanglei    时间: 2014-7-9 19:00
FrancisTan 发表于 2014-7-9 07:59
哦,谢谢你了

没事,要记住了
作者: 追梦无悔    时间: 2014-7-9 19:57
最好不要使用try catch 来判断用户的输入是否正确,应该使用 int.TryParse(strs,out ints),如果转换成功会返回true。double,DateTime等值类型都有这个方法。。。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2