我正在寻找使用 Do While 的优势,大多数博客和教程都说它取决于要求,如果没有我们从 Do While 获得的任何优势吗?
<?php
$i = 0;
do {
echo $i;
} while ($i > 0);
?>
我正在寻找使用 Do While 的优势,大多数博客和教程都说它取决于要求,如果没有我们从 Do While 获得的任何优势吗?
<?php
$i = 0;
do {
echo $i;
} while ($i > 0);
?>
那很好笑。今天是我需要一个 do while 循环的日子之一。有点像这样:我想生成一个数字,但它必须通过测试。
使用 while 循环,它看起来像这样:
$num = generateRandomNumber();
while (!numberMeetsRequirements($num)) {
$num = generateRandomNumber();
}
如您所见,重复一行,一次在循环内,一次在循环外。在这个特定示例中,您可以通过使用 do-while 循环来避免这种情况:
do {
$num = generateRandomNumber();
} while (!numberMeetsRequirements($num));
但就像其他人已经说过的那样:这真的取决于你在做什么。上面的代码只是一个例子。
没有优势。while
是一个前置条件循环,并且do..while
是后置条件循环。这意味着 - 在while
迭代之前检查条件,并在do..while
- 在迭代之后检查。
因此,indo..while
循环体将至少执行一次- 所以如果你正在迭代某些东西,它可以有零重复(例如,从数据库中选择的行数)。
请注意,由于结构化程序定理,任何程序都只能用if
和编写while
。所以,一般来说,不需要do..while
声明。您始终可以将其替换为while
.
主要的是循环内的语句至少执行一次,而在大多数其他构造中它们可能永远不会执行。
do { >>command<< } while ()
<-- 命令将至少执行一次
while () { >>command<< }
<-- 只有当条件为真时才会执行命令
Do While 将始终运行一次,因为仅在第一次运行后检查条件
仅当您的条件匹配时才会运行 While Do,因为它首先被检查
您可以使用for
,while
和do-while
循环交替实现任何算法。但是,遵循逻辑流程可能会促使您使用一个循环而不是另一个循环。
使用 do-while 循环更合适(基于逻辑流程)的一个主要示例是冒泡排序的实现。该算法的描述可以在这里找到,简而言之,您知道您至少需要遍历数组一次(冒泡排序的最佳情况是,数组的长度在哪里)O(n)
。n
实现如下:
$arr = array( 10, 5, 6, 1, 3, 2, 7, 8, 9, 4 );
$arr_len = 10;
$swapped;
do {
$swapped = false;
for ( $i = 0; i < ( $arr_len - 1 ); $i++ ) {
if ( $arr[ i ] > $arr[ i + 1 ] ) {
$temp = $arr[ i ];
$arr[ i ] = $arr[ i + 1];
$arr[ i + 1 ] = $temp;
$swapped = true;
}
}
} while ( $swapped == true );
我的 PHP 很生锈,如果有语法错误请告诉我。