0

do-while ループの条件を変数で設定したい。これが私のコードです...

$ans_type = mt_rand(1, 2);
if ($ans_type == 1){
    $condition = '$work_b != $c';
    $symbol = '=';
    $final_note = '1';
} else {
    $condition = '$work_b == $c';
    $symbol = '≠';
    $final_note = '2';      
}

do{
    $a = mt_rand(-25, 25);
    $b = mt_rand(-25, 25);
    $c = mt_rand(-25, 25);
    $d = mt_rand(-25, 25);

    if($op_1 == '–'){
        $work_b = $b * -1;
    } else {
        $work_b = $b;
    }

    if($op_2 == '–'){
        $work_d = $d * -1;
    } else {
        $work_d = $d;
    }
} while ($a == 0 || $b == 0 || $c == 0 || $d == 0 || $condition);

ループ$conditionの一部に入れたい変数に注意してください。while()ただし、これは無限ループを生成します。

では、変数をループの条件として使用する方法はありますか?

4

3 に答える 3

1

変数を条件として使用できますが、コードが無限ループを生成する理由は$condition、while ループ内で変更していないためです。したがって、$condition一度 true と評価されると、true と評価され続けます (コード内で変更されることはないため)。

于 2013-09-18T23:06:16.097 に答える
0

あなたがやろうとしていることは、通常の変数を使用することでよりよく達成できます:

if( blah ) {
    $conditionstate = false;
} else {
    $conditionstate = true;
}

...
} while( ... || ($work_b == $c) == $conditionstate );

より多様な条件がある場合は、おそらく再構築が必要です。それを再構築する方法が本当にない場合、私はそれを提案するのをためらっています。なぜなら、非常に多くの人がそれを誤用して恐ろしい結果をもたらしているからevalです。ただし、通常、それを使用する必要があるのは、プログラムの構造が悪いことを示しています。

ps これらの種類の乱数生成の問題は、次のようなコードでよりよく解決されます。

$a = mt_rand(-25, 24);
if( $a >= 0 ) {
    ++ $a;
}
// $a is -25 to 25, but never 0

$b = mt_rand(-25, 23);
if( $b >= min( $a, 0 ) ) {
    ++ $b;
}
if( $b >= max( $a, 0 ) ) {
    ++ $b;
}
// $b is -25 to 25, but never 0 or a

それはよりエレガントにすることができますが、あなたはアイデアを得る. ループする必要はまったくなく、停止することが保証されています。

于 2013-09-18T23:06:22.380 に答える
0
$ans_type = mt_rand(1, 2);
if ($ans_type == 1){
    $condition = ($work_b != $c);
    $symbol = '=';
    $final_note = '1';
} else {
    $condition = ($work_b == $c);
    $symbol = '≠';
    $final_note = '2';      
}

$condition を文字列として渡しています。$condition 変数をブール値として保存するだけです。

于 2013-09-18T23:07:21.630 に答える