【发布时间】:2010-09-18 10:51:49
【问题描述】:
当我在大学学习 CS 时(80 年代中期),不断重复的想法之一是始终编写循环测试在顶部 (while...) 而不是在底部 (do ... while ) 的循环。这些概念经常得到研究参考的支持,这些研究表明,在顶部测试的循环在统计上比底部测试的循环更可能是正确的。
因此,我几乎总是编写在顶部进行测试的循环。如果它在代码中引入额外的复杂性,我不会这样做,但这种情况似乎很少见。我注意到一些程序员倾向于几乎专门编写在底部进行测试的循环。当我看到这样的结构时:
if (condition)
{
do
{
...
} while (same condition);
}
或相反(while 中的if),这让我想知道他们是否真的是这样写的,或者当他们意识到循环没有处理 null 情况时是否添加了if 语句。
我已经进行了一些谷歌搜索,但无法找到有关此主题的任何文献。你们(和女孩)如何编写循环?
【问题讨论】:
-
我有一位大约在 1997 年的 CS 教授宣称您在编程中的两个选择是 C 或 Pascal,并且您应该选择 Pascal,因为它不允许您从循环内部增加循环计数器。他可能是对的,但他错了。
-
@Jay:我认为这意味着您更有可能通过底部测试循环引入循环边界错误,因此应确保这是表达算法的最佳方式。不要直接禁止他们。
-
哇,这是一个完美的例子,说明为什么不应该合并不精确的重复项。看起来一半的答案最初必须是针对“有什么区别”的完全不同的问题。在我意识到应该失去声誉的不是回答者,而是过分热心的版主给出了非常好的答案并将他们转移到一个他们没有解决的无关问题之前,我几乎对其中一些人投了反对票。
-
什么构造“在统计上更可能是正确的”是一个奇怪的标准。重要的是,“对于这个特定问题,什么是正确的?”从统计上讲,我们想要增加的次数比想要的增加次数要多。因此,您是否会说,任何时候您需要进行算术运算时,都应该始终使用“+”,而永远不要使用“*”,因为“从统计上”,加法通常是正确的?或者,我去杂货店的次数比去汽车经销商的次数多,因此,每当我离开家时,我都会自动去杂货店——即使我想做的是买一辆新车。
标签: language-agnostic loops while-loop do-while