我是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
)