0

私はプレイヤーA対Bの戦いのための簡単なドロップ式を書いています-レベルの違いがドロップ率を決定します。0: > 10 ||| 1 vs. 1 = 10%ここでの私の問題は、それが与える代わりに0: > 10 ||| 1 vs. 1 = 0%-なぜですか?

PhpFiddle:http ://www.phpfiddle.org/main/code/n1q-dw7

<?php

# lets simulate high level player A attacks low level player B
for ($A = 1; $A <= 100; $A++) {
    $B = 1;
    calculateMoneyDrop($A,$B);
}

# lets simulate low level player A attacks high level player B
for ($B = 1; $B <= 100; $B++) {
    $A = 1;
    calculateMoneyDrop($A,$B);
}

function calculateMoneyDrop($A,$B) {
    $X = $A - $B;
    echo '<strong>', $X, '</strong>: ';

    switch ($X) {
        case $X > 10:
            echo "> 10 ||| ";
            $X = 10;
            break;
        case $X < -90:
            echo "< -90 ||| ";
            $X = -90;
            break;
    }

    $dropRate = 10 - $X;
    echo $A, ' vs. ', $B, ' = ', $dropRate, '%<br>';

}
4

4 に答える 4

4

それは単に switch-case がどのように機能するかです。$Xにリストした値と等しいかどうかをチェックしcaseます。その値はブール値 (比較の結果はブール値です!) であり、PHP にはさまざまな型(この場合はと) を比較するクレイジーな方法があるため、そのケースのブロックが実際に実行されます。intbool

ifステートメントを使用するか、 と を使用minmaxます。

于 2012-09-19T11:58:09.550 に答える
1

スイッチを次のように変更した場合

 switch (true) {

元のコードは正しく実行されます。

おそらく、私よりも優れたphpを持っている人が理由を説明できます!

http://www.phpfiddle.org/main/code/6pg-nwc

于 2012-09-19T12:47:39.487 に答える
0

スイッチブロックは次のように動作します。

if(($X > 10)==$X){
        echo "> 10 ||| ";
        $X = 10;
}
else if(($X < -90)==$X){
        echo "< -90 ||| ";
        $X = -90;
}

「ケース」にあるものと、スイッチの括弧にあるものを比較します。スイッチは「等しい」比較にのみ使用されます。したがって、それを機能させるには、次を使用します。

if($X > 10){
        echo "> 10 ||| ";
        $X = 10;
}
else if($X < -90){
        echo "< -90 ||| ";
        $X = -90;
}
于 2012-09-19T12:05:43.633 に答える
0

さて、あなたの$X > 10場合、設定$X = 10して後で計算$dropRateします10 - $X、これは10 - 10、これは0です。

目的の結果が である場合、 のいずれかに$dropRateなります。また、出力が最初に表示された後、switch ケースに入るのもおかしいと思います...すべてのコードを表示していてよろしいですか?$X10$X == 0$X > 10

switchまた、そのようなケースを使用するのは良い習慣ではないと思います。ifこれはブロックの典型的な候補です。

于 2012-09-19T11:52:44.500 に答える