`while(condition){// work}和`do {// work} while(condition)`有什么好处?

时间:2010-05-31 18:12:55

标签: programming-languages c#-4.0 while-loop conditional-statements

我发现自己遇到了一个面试问题,其目标是编写一个排序算法,对一系列未排序的int值进行排序:

int[] unsortedArray = { 9, 6, 3, 1, 5, 8, 4, 2, 7, 0 };

现在我用Google搜索,发现那里有很多sorting algorithms! 最后,我可以激励自己深入研究Bubble Sort因为开始时看起来很简单。

我阅读了示例代码并找到了这样的解决方案:

    static int[] BubbleSort(ref int[] array)
    {
        long lastItemLocation = array.Length - 1;
        int temp;
        bool swapped;

        do
        {
            swapped = false;
            for (int itemLocationCounter = 0; itemLocationCounter < lastItemLocation; itemLocationCounter++)
            {
                if (array[itemLocationCounter] > array[itemLocationCounter + 1])
                {
                    temp = array[itemLocationCounter];
                    array[itemLocationCounter] = array[itemLocationCounter + 1];
                    array[itemLocationCounter + 1] = temp;

                    swapped = true;
                }
            }

        } while (swapped);

        return array;
    }

明确地 看到这种情况下do { //work } while(cond)语句是一个很好的帮助,并阻止使用另一个辅助变量。

但这是唯一一个更有用的案例,还是您知道使用此条件的任何其他应用程序?

4 个答案:

答案 0 :(得分:11)

一般来说:

  • 当您希望身体至少执行一次时使用do...while
  • 当您可能根本不想要执行正文时,请使用while...

编辑:我会说第一个选项大约有10%的时间出现,第二个选项大约有90%。在任何一种情况下,您都可以随时重新考虑使用它们。使用最接近你想说的那个。

答案 1 :(得分:5)

do ... while保证循环内的代码体至少执行一次这在某些条件下可以很方便;例如,在编写REPL循环时。

答案 2 :(得分:1)

任何时候你需要循环一些代码直到满足条件是一个很好的例子,说明何时使用do ... while或while ...

何时使用do ... while或while ...的一个很好的例子是,如果你有一个游戏或模拟游戏引擎持续运行各种组件,直到某些条件出现,就像你赢或输。

当然这只是一个例子。

答案 3 :(得分:0)

以上帖子对于两个条件循环形式是正确的。有些语言有重复,直到形式而不是while。还有一个极简主义的观点,其中只有必要的控制结构应该存在于一种语言中。虽然这样做是必要的,但事实并非如此。对于冒泡排序,你要避免去那里,因为它是常见的排序算法中最慢的。请查看选择排序或插入排序。 Quicksort和merge排序速度很快,但如果你碰巧选择了一个不好的数据透视值,就很难在不使用递归的情况下编写并且表现不佳。