0

複数の条件で複数の if ステートメントを作成しようとしています。コードを実行すると問題なく動作しますが、出力が変わることはありません。私は常に 2 番目のステートメント >= 29 を取得します。これが私のコードです。

 if (label.text <= @"30") 
    {label.text = @"Text";}   
else if (label.text >= @"29") 
    {label.text = @"Text";} 
else if (label.text >= @"19")
    {label.text = @"Text";}
else if (label.text >= @"10") 
    {label.text = @"Text";}
else if (label.text  = @"00") 
    {label.text = @"Text";}

OK、コードを変更しましたが、まだ提案が機能しません

      label.text = temporaryValue;
     if ([label.text floatValue] <= 30) 
         {label.text = @"text1";}   
else if ([label.text floatValue] >= 29) 
         {label.text = @"text2";}   
else if ([label.text floatValue] >= 19)
         {label.text = @"text3";}
else if ([label.text floatValue] >= 10) 
         {label.text = @"text4";}
else if ([label.text floatValue] == 0) 
         {label.text = @"text5";}
4

3 に答える 3

5

このように文字列の数値を比較することはできません。この操作はポインタ比較を実行します。つまり、渡した文字列インスタンスの (かなりランダムな) アドレスを比較します。次のようなものを使用します。

if ([label.text floatValue] >= 30.0) {
}

于 2012-07-15T12:48:45.853 に答える
1

>= または <= を使用NSString*すると、これらの文字列の内容ではなく、アドレスが比較されます。このように比較したい場合は、文字列を解析して、int一般的な整数比較を使用して比較する必要があります。

int val = [label.text intValue];
if (val > 30) {
   ...
}
else ... // more of your ifs
于 2012-07-15T12:54:25.593 に答える
0

構文を修正しても(ここの他の回答で示唆されているように)、数値比較を処理するとロジックフローに欠陥があるように見えるため、まだ問題があります。このことを考慮

if ([label.text floatValue]  <= 30.0) 
    {label.text = @"Text";}   
else if ([label.text floatValue]  >= 29.0) 
    {label.text = @"Text";} 

テスト値が 30 より大きい場合は、次の項目に移動します。

else if ([label.text floatValue]  >= 29.0)

明らかに、これは 29 よりも大きくなります。これは、30 以下になることができなかったためです。したがって、最初の条件が false であると仮定すると、他のすべての条件に到達することはありません。2 番目の条件は true でなければなりません。

于 2012-07-15T12:54:21.553 に答える