2016-06-28 5 views
-3

数字をリストに追加しようとしていますが、数字が255でなく0でない場合は、ネストされたifを避けるようにします。私がこれをしなければならないコードは以下の通りです。C#ifステートメント。 aまたはbでない場合

if (!(r == 255 || r == 0)) 
{ 
    rlist.Add(r); 
    listBox2.Items.Add(Math.Floor(r).ToString()); 
} 

しかし、まだ255と0がリストボックスに追加されていますが、理由を特定できません。誰かが私が間違っていることを指摘できますか? ご協力いただきありがとうございます。

+5

'r'は' double'または他の浮動小数点型ですか?もしそうなら、計算などの丸め誤差を扱っていないことを確実に知っていますか? 'Math.Floor(r)'は 'r'が小数部を持つことを期待していると思われます。 – adv12

+1

'Math.Floor(r).ToString()'は疑わしく見えます。あなたは確かにr = 255であり、そうではありませんか? 255.1? –

+1

あなたの言葉の選択についてのさらなるコメント:あなたのコードの英語の言い換えは、「もしかしなければaかb」です。あなたのタイトルと紹介文では、コードのロジックとは異なる "not a or not b"と言っています。コードに希望のロジックが表示されている場合は、タイトルが "aまたはbでない場合"を、最初の文で "not 255 * and * not 0"と読み替えることをお勧めします。 – adv12

答えて

5

他にも言及したように、rは浮動小数点です。これを試してください:

var rFloor = Math.Floor(r); 
if (!(rFloor == 255 || rFloor == 0)) 
{ 
    rlist.Add(r); // might want to use rFloor here too 
    listBox2.Items.Add(rFloor.ToString()); 
} 
+0

これは、OPの希望するロジックについての前提を作ります - おそらく正しいものですが、コメントで確認されるまで、私はアップフォートを保留しています。 – adv12

+0

あなたの前提がうまくいってくれてありがとう、私はあなたの前提がRが255以上にならないと仮定しています。しかし、私はOPでこれについて言及するのを忘れました – may19c19

5

唯一の説明は、はintではありませんが、doubleなどです。

そう想像r = 255.3 ...

if (!(r == 255 || r == 0)) // is true, r is not 255 and not 0 

しかし

listBox2.Items.Add(Math.Floor(r).ToString()); 

"255"Math.Floor(255.3)として戻っ255を追加します。


解決策を忘れた場合、TarkaDaalは既に1つを提供しています。

+0

あなたの高速応答、RはINTではなかったが、最大値は255、私はしかし、OPでこれを言及することを忘れて、私はそれを謝罪します。 – may19c19