2012-01-26 9 views
0

にそれを望む前に、私は両方の$頭まで変数と$尾変数を改めて表明するためのプログラムを取得しようとしています、私は私が間違っているのかを把握することはできません0よりも大きいです。 whileループは、たった1回の繰り返しの後で常に壊れます。反復破壊私は

<?php 
echo "<table border=\"1\">"; 
echo "<tr><td>Person</td><td>Heads</td><td>Tails</td><td>Total</td></tr>"; 



for ($person=1; $person < 11; $person++){ 
echo "<tr><td>Person $person </td>"; 
$both = 0; 
$heads = 0; 
$tails = 0; 
$total = 0; 
while ($both < 1){ 
    do { 
     $total++; 
     $random = rand(1,2); 
     if ($random == 1){ 
      $heads++; 
     } else{ 
      $tails++; 
     } 
    } while (($tails < 0) && ($heads < 0)); 
    $both = 1; 

} 
echo "<td>$heads</td><td>$tails</td><td>$total</td>"; 
echo "</tr>"; 

} 

echo "</table>"; 

?> 

答えて

2
このラインで

} while (($tails < 0) && ($heads < 0)); 

それは常にfalseとなりますので$tails$headsどちらもこれまで、0より厳密に小さいだろうと思われます。両方の場合は<= 0を試してください。

論理的には、のいずれかが該当する場合はのいずれかが真である場合はループします。したがって&&の代わりに||を使用してください。

結果:

また
} while (($tails <= 0) || ($heads <= 0)); 

、私はwhile ($both < 1)ループについて少し興味があります。ループの前に$both = 0を割り当てて、その反復の最後に$both = 1を割り当てているようです。それはループが1回だけ実行されることを保証します。その場合、そのループを持つポイントは何ですか?おそらくこれは未完成のコードなのでしょうか?

+0

美しく働いた。どうもありがとうございます。私はなぜそれが&&演算子だと思ったのか分かりません!あなたの質問のために – stytown

+0

は、それだけで、両方の$尾の後に$両方= 1を代入し、$ヘッドが右@stytown 0より大きい – stytown

+1

をしているが、あなたはheads'である$ '両方' $のtails'まで、その内側のループを終了しません。とにかく「0」よりも大きいので、決して外側ループを2回以上実行することはありません。 – Wiseguy

0

少なくとも1つの頭部が得られるまでコインを裏返しにしておきたい場合少なくとも1つの結果が残っていますか?それと同時に、何回フリップしたのかを把握していますか?

私はこのようなコード化されています:

$heads = 0; 
$tails = 0; 
$total = 0; 

while(true) { 
    $total ++; 
    $random = rand(0, 1); // 0 for tail, 1 for head 
    if($random) $heads ++; 
    else   $tails ++; 

    if($heads >= 1 && $tails >= 1) break; 
} 

両方$頭と尾$は、1つまたはそれ以上になるまで、whileループが無限に実行し続けます。

+0

私の意見では、このコードは読みやすく、より洗練されていますが、Wiseguyはコード内の問題を修正しました。 – hobbes3

+2

$ randomはif文で常にtrueを評価しますか? – ppp

+0

これで、追加する変数($ headsまたは$ tails)をどのように知ることができますか? – stytown

関連する問題