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


Why does this return 1 number and then stops the loop? PHP

我是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的新功能!)

第一次执行循环后,不能有$sixCount > 1 && $fiveCount > 1等条件。

第一次滚动后,假设是3,您的变量是:

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

它不适合while条件,因为例如,$sixCount > 1是false,其他变量也是。

while表达式表示:

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

如果$sixCount小于3且大于1,则意味着$sixCunt等于2。其他人也是如此。因此,它的意思是"保持循环,同时$sixCount等于2$fiveCount等于2[所有其他都等于2]"。

您从0:处的这些变量开始

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

因此,最初不满足循环条件。循环允许其中最多一个递增最多一次

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

无论滚动的数字是多少,都不可能在单次滚动结束时将任何计数设为2,当然也不可能将所有的计数设为,因此循环条件将不满足,循环将不可避免地停止。

当"骰子"掷下每个数字中的两个(1,2,3,4,5,6)时,它应该停止循环

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

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

正如其他人所说,while循环的条件永远不会为真。相反,您需要确保变量不是全部为2。试试这个:

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

我刚刚修改了您的脚本。这可能是一个有趣的游戏。它掷骰子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
)