0

私はボディマス指数を扱っていますが、なぜ私の「範囲」システムがラベルを1つの値にしか設定していないのか疑問に思います。これを設定するためのより良い方法はありますか?

   int bmiInt = currentBMI;
if ( 0<=bmiInt <= 18.5) {
    weightStatus.text = @"Status: Underweight";
}
if (18.6 <= bmiInt <= 24.9) {
    weightStatus.text = @"Status: Normal weight";
}
if (25 <= bmiInt <= 29.9) {
    weightStatus.text = @"Status: Overweight";
}
if (bmiInt >= 30) {
    weightStatus.text = @"Status: Obese";
}

何らかの理由で、bmiIntがその範囲内にない場合でも、weightStatus.textは常に@"StatusOverweight"と等しくなります。なんで?

4

1 に答える 1

1

0 <= bmiInt <= 18.5あなたが思っていることをしません。比較演算子の戻り値はまたはのいずれ01であり、trueとfalseを示します。この式は、と書き直すことができます(0 <= bmiInt) <= 18.5。つまり、最初の比較を評価した後、またはで0 <= bmiInt終わることになります。どちらも、条件を渡すと評価されます。0 <= 18.51 <= 18.51

これは、最初の3つの条件に当てはまります。つまり、bmiInt >= 30trueと評価されない限り、ラベルには常にが表示され@"Status: Overweight"ます。

これを次のように書き直したい

if (0 <= bmiInt && bmiInt <= 18.5) {
    ...
}
于 2013-02-12T22:21:06.837 に答える