黑马程序员技术交流社区

标题: 为什么条件为while (true) [打印本页]

作者: 张静慈    时间: 2012-4-8 18:38
标题: 为什么条件为while (true)
  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.         }
复制代码

作者: 徐瑞    时间: 2012-4-8 18:43
true判断循环条件自动成立.如果在try中条件成立,方法就直接就return  number这个值,不在循环;如果try不成立,进入catch,重新输入数字,条件里写true,就继续进入try的循环,直到输入正确为止.
作者: 天高地阔    时间: 2012-4-8 19:13
这是个do while 循环,
如果输入正确,就不会运行到while(true),会直接return 一个返回值出去,从而退出这个循环了就,
如果运行到了 说明输入错误了,用true是让这个循环继续循环,知道用户输入正确以后然后 return;
作者: 刘冬晓    时间: 2012-4-8 19:38
你在这里可能需要接收一个正确格式的int型数字,所以在一个死循环中进行校验,如果输入正确,择返回一个正确的int型数字,然后退出循环,如果输入格式错误,择继续循环。
作者: 蒋敦方    时间: 2012-4-8 19:41
do while() 括号里面的条件是一个bool 值判断条件。系统已帮你定义好了的。如果你输入没有错误,return出这个循环,如果输入有误则继续循环条件。
作者: 韩艳君    时间: 2012-4-8 19:49
这段代码主要是实现:判断输入的字符串是否成功转换成整型,如果不能转换成整型,就抛出异常,
并且,进入下一次循环,while(true);是只要没有返回值,就一直循环。
作者: 王宗伟    时间: 2012-4-8 19:52
简单言之,只有一直循环才能始终检查是否出错,出错了就不是true了,就会停止
作者: 黄国钢    时间: 2012-4-8 21:05
这个方法主要是为了判断输入的值是否为数字,如果转换成int类型成功,说明输入的是数字,就返回该值,
如果转换不成功,说明输入的不是数字,继续循环输入。
用while(true)就是为了让你输入一个数字,不让你输入其他的,否则让你一直输入下去。
作者: 徐刚    时间: 2012-4-8 21:08
输入内容不能转换为int类型时,就跳过return进入catch中,然后一直循环要求用户重新输入,直到输入内容能转换为int类型,这时就在try中return这个数,同时结束了这个方法的调用,当然也不会再循环了。
作者: 张云静    时间: 2012-4-8 21:49
本帖最后由 张云静 于 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
        }


作者: 职业规划-蔡红微老师    时间: 2012-4-8 22:04
do....while(true){ }是死循环,你的本意是想判断输入的是否是数字,但这样运行下去会是一个死循环,在do....while(){   }中加入try .....catch....就是想在用户输入的时候将用户输入的内容转化为数字,但不能写true,最好是写一个标记,如果用户输入正确给那个标记附一个值,如果输入错误改变他的值,将那个值做为那个while的条件即可。
作者: 霍世勇    时间: 2012-4-9 10:52
因为那是判定条件啊,只有条件成功程序才可以继续往下执行.
作者: 翁金鹏    时间: 2012-4-9 13:07
while(true)构建一个死循环,当用户输入正确 return 结果 结束程序
作者: 白刚    时间: 2012-4-11 22:19
楼上的人大部分都说到重点上面去了,这是一个循环,一直要到你输入与你程序设计的理念相同时,才会跳出循环。当然“张云静”那个,个人觉得方向是正确的,但作用没多大区别
作者: 谢栋文    时间: 2012-4-12 07:19
当你要求用户做某个操作返回的结果你有不满意的时候,这个时候就需要死循环来提示用户继续操作,其实也不需要用到死循环可以用递归实现,但是递归很容易造成程序崩溃(不熟悉最好别使用)附上代码
  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.         }
复制代码

作者: pray    时间: 2014-4-26 06:14
顶你一下,好贴要顶!




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