0

我有一些Objective C,但我不理解变量比较运算符:

if ([bmiView.text floatValue] < 18.50) {
    classification.text = @"Underweight";
    bmiImageView.image = [UIImage imageNamed:@"underweight.png"];
}
if ([bmiView.text floatValue] > 18.50 < 24.99) {
    classification.text = @"Healthy";
    bmiImageView.image = [UIImage imageNamed:@"healthy.png"];
}
if ([bmiView.text floatValue] > 25 < 29.99) {
    classification.text = @"Overweight";
    bmiImageView.image = [UIImage imageNamed:@"overweight.png"];
}
if ([bmiView.text floatValue] > 30 < 39.99) {
    classification.text = @"Obese";
    bmiImageView.image = [UIImage imageNamed:@"obese.png"];
}
if ([bmiView.text floatValue] > 40) {
    classification.text = @"Very Obese";
    bmiImageView.image = [UIImage imageNamed:@"veryobese.png"];
}

每次我运行应用程序时,当用户的 BMI 超过 40.00 时,唯一正常工作的分类是“非常肥胖”。任何其他 BMI 都会导致以下分类,即“肥胖”,这应该适用于 30.00 到 39.99 之间的 BMI。为什么它不起作用?

4

2 回答 2

3
if ([bmiView.text floatValue] > 18.50 < 24.99) {

...不做你认为它做的事。您需要进行两次比较;

if ([bmiView.text floatValue] > 18.50 && [bmiView.text floatValue] < 24.99) {

另请注意,如果浮点值恰好为25,则不会出现任何情况。

改用重写代码可能是个好主意else,这样您就可以跳过对下限的检查;

if ([bmiView.text floatValue] < 18.50) {
    classification.text = @"Underweight";
    bmiImageView.image = [UIImage imageNamed:@"underweight.png"];
}
else if ([bmiView.text floatValue] < 25.0) {
    classification.text = @"Healthy";
    bmiImageView.image = [UIImage imageNamed:@"healthy.png"];
}
...

旁注,[bmiView.text floatValue] > 18.50 < 24.99所做的是将 floatvalue 与 进行比较18.5,生成 1 或 0 作为结果,具体取决于它是真还是假。然后继续比较 0/1 是否小于 24.99,这总是正确的。

于 2013-07-26T05:42:16.660 回答
0

看起来您的比较应该更像:

if ([bmiView.text floatValue] > 25 && [bmiView.text floatValue] < 29.99) {
    classification.text = @"Overweight";
    bmiImageView.image = [UIImage imageNamed:@"overweight.png"];
}
于 2013-07-26T05:42:54.453 回答