黑马程序员技术交流社区

标题: do-while循环比较while循环优势? [打印本页]

作者: 陈晖    时间: 2013-4-29 10:15
标题: do-while循环比较while循环优势?
本帖最后由 陈晖 于 2013-5-1 08:39 编辑

这几天复习C#面向过程,看到while和do-while循环,
在想一个问题:有了while循环,为什么还要有do-while循环?
虽然说do-while循环有个特点:至少能够执行一次,
但是相对于while循环,do-while循环写得又麻烦,非常不方便,
do-while的优势在哪里?一般我们现在学习基本上都用while循环,哪些地方用do-while循环比较多?{:soso_e132:}

作者: 李君言    时间: 2013-4-29 10:26
while循环是先判断条件,在确定是否执行循环体
do-while循环是先执行循环体,才判断条件是否在继续循环
不知道你有没有看视频,上面有的
作者: 海不扬波    时间: 2013-4-29 10:28
do-while语句由关键字do和while组成,是循环语句中最典型的“先循环再判断”的流程控制结构,这个和其它2个循环语句都不相同。
do-while语句的语法格式为:
do{
循环体;
}while(循环条件);
语法说明:在do-while语句中,循环体部分是重复执行的代码部分,循环条件指循环成立的条件,要求循环条件是boolean类型,
值为true时循环执行,否则循环结束,最后整个语句以分号结束。
执行流程:当执行到do-while语句时,首先执行循环体,然后再判断循环条件,
如果循环条件不成立,则循环结束,如果循环条件成立,则继续执行循环体,循环体执行完成以后再判断循环条件,依次类推。
在实际的程序中,do-while的优势在于实现那些先循环再判断的逻辑,这个可以在一定程度上减少代码的重复,
但是总体来说,do-while语句使用的频率没有其他的循环语句高。


作者: 淡蓝色    时间: 2013-4-29 10:53
do...while循环的优势在于至少执行一次,如要取一个随机数,意味着至少要取一次,这时就可以考虑用do...while循环,当然while也可以实现,过程要稍微复杂一点
作者: 刘胜寒    时间: 2013-4-29 11:06
基本写代码一般使用while
很少用do,while
我是很少用的
有些东西要用do,while
比如说给你一个int类型然后让你统计0-9出现多少次啊这种情况用do-while比较好
int[] ans = new int[10];
int n =1898989;
while(n!=0)
{
   ans[n%10]++;
  n/=10;
}
如果n初始值不是零的话用 while和do while的结果都一样 但是
n是零的话,那么用while的方法就错了

用dowhile和while 只有一点细微的区别。
只能给你举这个例子了说明一下问题,其他我也想不出什么好的例子来

希望对你有帮助
作者: 张伟86    时间: 2013-4-30 12:39
本帖最后由 张伟86 于 2013-4-30 12:54 编辑

借用楼上的话:在实际的程序中,do-while的优势在于实现那些先循环再判断的逻辑,这个可以在一定程度上减少代码的重复, 这句可以从下例剖析出来,同样的结果,实现过程的逻辑性是不一样的。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {            
            //老师问学生会了吗?学生说不会,老师继续讲解,直到10次讲解后学生还不会或者学生会了就放学;
            //使用while处理时候:
            int num = 0;
            //这段代码需要重复
            /////////////////////////////////////
            Console.WriteLine("老师说:你会了吗?");
            Console.Write("学生说:");
            string str = Console.ReadLine();
            /////////////////////////////////////

            while (true)
            {
                if (str == "y")
                {
                    Console.WriteLine("老师说:放学了!");
                    break;
                }
                else if (str == "n")
                {
                    num++;
                    if (num < 11)
                    {
                        Console.WriteLine("那再讲1次吧,听好了,这可是再讲第{0}次了!", num);                        
                    }
                    else
                    {
                        Console.WriteLine("好吧,今天就到此结束吧,明天继续了!");
                        break;
                    }
                }
                //这里重复这段代码
                /////////////////////////////////////
                Console.WriteLine("老师说:你会了吗?");
                Console.Write("学生说:");
                str = Console.ReadLine();
                /////////////////////////////////////

           }


            //使用do-while处理时候:
            int num1 = 0;            
            do
            {
                //上面的重复性代码也只需要输入一遍而已,而且程序看起来很整齐
                /////////////////////////
                Console.WriteLine("老师说:你会了吗?");
                Console.Write("学生说:");
                string str1 = Console.ReadLine();
                ///////////////////////////////////

                if (str1 == "y")
                {
                    Console.WriteLine("老师说:放学了!");
                    break;
                }
                else if (str1 == "n")
                {
                    num1++;
                    if (num1 < 11)
                    {
                        Console.WriteLine("那再讲1次吧,听好了,这可是再讲第{0}次了!", num1);                        
                    }
                    else
                    {
                        Console.WriteLine("好吧,今天就到此结束吧,明天继续了!");
                        break;
                    }
                }

            } while (true);
            

            Console.ReadKey();
        }
    }
}




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