A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张静慈 中级黑马   /  2012-4-8 18:38  /  6251 人查看  /  15 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

while(true)构建一个死循环,当用户输入正确 return 结果 结束程序

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
  1. public static int ReadInt()
  2.         {
  3.             int number = 0;
  4.             do
  5.             {
  6.                 try
  7.                 {
  8.                     number = Convert.ToInt32(Console.ReadLine());
  9.                     return number;
  10.                 }
  11.                 catch
  12.                 {
  13.                     Console.WriteLine("输入有误,请重新输入");
  14.                 }
  15.             }
  16.             while (true);
  17.         }
复制代码

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

15 个回复

倒序浏览
true判断循环条件自动成立.如果在try中条件成立,方法就直接就return  number这个值,不在循环;如果try不成立,进入catch,重新输入数字,条件里写true,就继续进入try的循环,直到输入正确为止.

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
这是个do while 循环,
如果输入正确,就不会运行到while(true),会直接return 一个返回值出去,从而退出这个循环了就,
如果运行到了 说明输入错误了,用true是让这个循环继续循环,知道用户输入正确以后然后 return;

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
你在这里可能需要接收一个正确格式的int型数字,所以在一个死循环中进行校验,如果输入正确,择返回一个正确的int型数字,然后退出循环,如果输入格式错误,择继续循环。

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
do while() 括号里面的条件是一个bool 值判断条件。系统已帮你定义好了的。如果你输入没有错误,return出这个循环,如果输入有误则继续循环条件。

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
这段代码主要是实现:判断输入的字符串是否成功转换成整型,如果不能转换成整型,就抛出异常,
并且,进入下一次循环,while(true);是只要没有返回值,就一直循环。

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
简单言之,只有一直循环才能始终检查是否出错,出错了就不是true了,就会停止

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
这个方法主要是为了判断输入的值是否为数字,如果转换成int类型成功,说明输入的是数字,就返回该值,
如果转换不成功,说明输入的不是数字,继续循环输入。
用while(true)就是为了让你输入一个数字,不让你输入其他的,否则让你一直输入下去。

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
输入内容不能转换为int类型时,就跳过return进入catch中,然后一直循环要求用户重新输入,直到输入内容能转换为int类型,这时就在try中return这个数,同时结束了这个方法的调用,当然也不会再循环了。

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 张云静 于 2012-4-8 22:08 编辑

我跟上面的观点不一样,do-while语句里有try-catch语句,这段程序的作用是当用户输入数字时,可以正确转化为数字,当输入的不是数字时会会进入catch语句中,我觉得不管是否输入的是否是正确的数字,while(true)会使这个程序一直循环,是一个死循环。(大家可以把代码放到VS中去看一下是否为死循环)
如果想正确输入数字时跳出循环,可以把代码变为下面这样:
public static int ReadInt()
        {
            int number = 0;
            bool flag; //定义一个布尔型的标志项
            do
            {
                try
                {
                    number = Convert.ToInt32(Console.ReadLine());
                    flag=false; //如果正确输入数字,可以flag变为false,可以跳出循环
                    return number;
                }
                catch
                {
                    Console.WriteLine("输入有误,请重新输入");
                     flag=true; //如果输入的非数字,将flag变为true,则继续循环
                }
            }
            while (flag); //判断条件为flag
        }

评分

参与人数 1技术分 +2 收起 理由
宋天琪 + 2

查看全部评分

回复 使用道具 举报
do....while(true){ }是死循环,你的本意是想判断输入的是否是数字,但这样运行下去会是一个死循环,在do....while(){   }中加入try .....catch....就是想在用户输入的时候将用户输入的内容转化为数字,但不能写true,最好是写一个标记,如果用户输入正确给那个标记附一个值,如果输入错误改变他的值,将那个值做为那个while的条件即可。

评分

参与人数 1技术分 +2 收起 理由
宋天琪 + 2

查看全部评分

回复 使用道具 举报
因为那是判定条件啊,只有条件成功程序才可以继续往下执行.

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
楼上的人大部分都说到重点上面去了,这是一个循环,一直要到你输入与你程序设计的理念相同时,才会跳出循环。当然“张云静”那个,个人觉得方向是正确的,但作用没多大区别

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
当你要求用户做某个操作返回的结果你有不满意的时候,这个时候就需要死循环来提示用户继续操作,其实也不需要用到死循环可以用递归实现,但是递归很容易造成程序崩溃(不熟悉最好别使用)附上代码
  1. public static void Show(string str)
  2.         {
  3.             int num = 0;
  4.             try
  5.             {
  6.                 num = int.Parse(str);
  7.                 Console.WriteLine("输入正确,程序退出");
  8.             }
  9.             catch {
  10.                 Console.WriteLine("格式错误,重新输入");
  11.                 Show();//这里继续调用本方法实现递归
  12.             }
  13.         }
复制代码

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
pray 高级黑马 2014-4-26 06:14:50
16#
顶你一下,好贴要顶!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马