1

do-while 循环可以有多个条件吗?如果是这样,我无法弄清楚为什么下面的代码除了第一个条件之外都失败了。

使用的函数...

function gcf($a,$b) {
$a = abs($a); $b = abs($b);
if( $a < $b) list($b,$a) = Array($a,$b);
if( $b == 0) return $a;
$r = $a % $b;
while($r > 0) {
    $a = $b;
    $b = $r;
    $r = $a % $b;
}
return $b;
}


function factors($n){
$factors_array = array();
for ($x = 1; $x <= sqrt(abs($n)); $x++)
{
    if ($n % $x == 0)
    {
        $z = $n/$x; 
        array_push($factors_array, $x, $z);
    }
}
return $factors_array;
}

代码...

$a = $b;

do{
    $a = mt_rand(8, 100);
    $a_factors_array = factors($a);

    $b = mt_rand(8, 100);
    $b_factors_array = factors($b);

} while ($a == $b && count($a_factors_array) < 4 && count($b_factors_array) < 4 && gcf($a, $b) == 1);

echo $a . '<br>';
echo $b . '<br>';

echo count($a_factors_array) . '<br>';
echo count($b_factors_array) . '<br>';

echo gcf($a, $b) . '<br>';

我不断得到 $a 和 $b 的数字,它们的因子少于 4 并且 GCF 为 1。有什么想法吗?

4

2 回答 2

2

你需要||代替&&. 只要满足任何一个条件,您就想重复循环。目前,只有在满足所有条件时才会重复循环。

于 2013-07-17T19:58:24.323 回答
0

我认为你有一个 AND,你的意思是 OR:

do{
    $a = mt_rand(8, 100);
    $a_factors_array = factors($a);

    $b = mt_rand(8, 100);
    $b_factors_array = factors($b);

} while ($a == $b || count($a_factors_array) < 4 || count($b_factors_array) < 4 || gcf($a, $b) == 1);

用你的方式,如果这可能不是你想要的,就会while停下来。$a !== $b

于 2013-07-17T20:05:15.173 回答