0

我正在使用体重指数,我想知道为什么我的“范围”系统只将标签设置为一个值。有没有更好的方法来设置它会更好地工作?

   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 也始终等于 @"Status Overweight"。为什么?

4

1 回答 1

1

0 <= bmiInt <= 18.5不做你认为它做的事。比较运算符的返回值是0or 1,表示真假。这个表达式可以重写为(0 <= bmiInt) <= 18.5,这意味着在计算第一个比较之后0 <= bmiInt,你将得到0 <= 18.5or 1 <= 18.5,它们都计算为1,它通过了条件。

对于您的前 3 个条件,这将是正确的,这意味着除非bmiInt >= 30评估为真,否则您的标签将始终显示@"Status: Overweight"

你想像这样重写这个

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