我是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新手!)
答案 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;
...
因此最初不满足循环条件。循环允许最多只有一个最多增加::
无论滚动的是什么号码,都不可能在单个滚动结束时将任何的计数变为2,当然也不能所有,所以循环条件不会得到满足,循环将不可避免地停止。$roll = rand(1, 6);
if ($roll == 6) {
$sixCount++;
echo "6";
} else if ($roll == 5) {
$fiveCount++;
echo "5";
} ...
当&#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
)