为什么这会返回1个数字然后停止循环? PHP

时间:2014-10-12 17:21:38

标签: php loops while-loop

我是PHP的初学者,所以我的代码效率可能不高或不高。 为什么此代码返回1个数字然后停止循环?当"骰子"它应该停止循环。滚动了每个数字中的两个(1,2,3,4,5,6)。但是现在它在随机生成1个数字之后就停止了。

   <?php
        $sixCount = 0;
        $fiveCount = 0;
        $fourCount = 0;
        $threeCount = 0;
        $twoCount = 0;
        $oneCount = 0;
        $rollCount = 0;
        do{
            $roll = rand(1,6);
            $rollCount++;
            if($roll == 6){
                $sixCount++;
                echo "6";
            } else if($roll == 5){
                $fiveCount++;
                echo "5";
            } else if($roll == 4){
                $fourCount++;
                echo "4";
            } else if($roll == 3){
                $threeCount++;
                echo "3";
            } else if($roll == 2){
                $twoCount++;
                echo "2";
            } else {
                $oneCount++;
                echo "1";
            }
        } while($sixCount < 3 && $sixCount > 1 && $fiveCount < 3 && $fiveCount > 1 && $fourCount < 3 && $fourCount > 1 && $threeCount < 3 && $threeCount > 1 && $twoCount < 3 && $twoCount > 1 && $oneCount < 3 && $oneCount > 1);
        echo "<br />It took {$rollCount} rolls!";
    ?>

这是Codecademy.com的练习!

谢谢, Jesper(Stackoverflow新手!)

5 个答案:

答案 0 :(得分:2)

首次执行循环后,除其他条件外,您不能拥有$sixCount > 1 && $fiveCount > 1

答案 1 :(得分:1)

首次滚动后,假设它是3,您的变量是:

    $sixCount = 0;
    $fiveCount = 0;
    $fourCount = 0;
    $threeCount = 1;
    $twoCount = 0;
    $oneCount = 0;

它不适合条件,例如,$sixCount > 1也是假的,也是其他变种。

答案 2 :(得分:1)

while表达式说:

while ($sixCount < 3 && $sixCount > 1 && $fiveCount < 3 && $fiveCount > 1 ...

如果$ sixCount小于3且大于1,则意味着$ sixCount等于2.同样为其他人。所以它意味着&#34;保持循环,而$ sixCount等于2 $ fiveCount等于2 [所有其他人等于2]&#34;。

您从0开始使用这些变量:

$sixCount = 0;
$fiveCount = 0;
...

因此最初不满足循环条件。循环允许最多只有一个最多增加

$roll = rand(1, 6);
if ($roll == 6) {
    $sixCount++;
    echo "6";
} else if ($roll == 5) {
    $fiveCount++;
    echo "5";
} ...

无论滚动的是什么号码,都不可能在单个滚动结束时将任何的计数变为2,当然也不能所有,所以循环条件不会得到满足,循环将不可避免地停止。

  当&#34;骰子&#34;它应该停止循环。滚动了每个数字中的两个(1,2,3,4,5,6)

在这种情况下,正确的条件是:

while ($sixCount < 2 && $fiveCount < 2 && ...

答案 3 :(得分:0)

正如其他人所说,你对while循环的条件永远不会成立。相反,您希望确保变量不是全部为2.请尝试改为:

while ($sixCount < 2 || $fiveCount < 2 || $fourCount < 2 || $threeCount < 2 || $twoCount < 2 || $oneCount < 2)

答案 4 :(得分:0)

我刚刚调整了你的脚本。这可能是一个有趣的游戏。 它滚动6个骰子2(6 x 2)然后如果不满足要求,它会再次滚动骰子:

$rollCount = 0;
do{
    $sixCount = 0;
    $fiveCount = 0;
    $fourCount = 0;
    $threeCount = 0;
    $twoCount = 0;
    $oneCount = 0;
    $rollCount++;
    for ($i= 0; $i< 2 * 6; $i++) {
        $roll = rand(1,6);
        if($roll == 6){
            $sixCount++;
            echo "6";
        } else if($roll == 5){
            $fiveCount++;
            echo "5";
        } else if($roll == 4){
            $fourCount++;
            echo "4";
        } else if($roll == 3){
            $threeCount++;
            echo "3";
        } else if($roll == 2){
            $twoCount++;
            echo "2";
        } else {
            $oneCount++;
            echo "1";
        }
    }
    echo "_";
} while(!($sixCount < 3 && $sixCount > 1 && $fiveCount < 3 && $fiveCount > 1 && $fourCount < 3 && $fourCount > 1 && $threeCount < 3 && $threeCount > 1 && $twoCount < 3 && $twoCount > 1 && $oneCount < 3 && $oneCount > 1));
    echo "<br />It took {$rollCount} rolls!";
    $a = array(
    $sixCount,
    $fiveCount,
    $fourCount,
    $threeCount,
    $twoCount,
    $oneCount);

    echo '<pre>';
    print_r($a);
    echo '</pre>';

赋予这位产出之王:

262225451666_535451252543_666153663214_652652635413_522615315213_412123422526_113553235335_255616351453_124215216465_112544353243_161145351612_522462262355_114331531645_563664155335_455623424146_233336226515_213136514365_646344361534_445325236533_423153546564_324466143565_422464136444_631511342612_516266141216_613556242333_351541131651_554665566244_261433652145_
It took 28 rolls!
Array
(
    [0] => 2
    [1] => 2
    [2] => 2
    [3] => 2
    [4] => 2
    [5] => 2
)