2016-06-28 123 views
-3

我想添加一個數字到列表中,但只有當數字不是255而不是0時,id纔會避免嵌套的if。我必須這樣做的代碼如下。C#if語句。如果不是a或b

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

但是我仍然越來越255和0添加到列表框,我不明白爲什麼。任何人都可以指出我做錯了什麼? 在此先感謝您的幫助。

+5

是'r'雙''還是其他浮點類型?如果是這樣,你確實知道你沒有處理來自計算或類似事件的舍入誤差? 'Math.Floor(r)'似乎意味着你期望'r'有一個小數部分。 – adv12

+1

'Math.Floor(r).ToString()'看起來很可疑。你確定r = 255而不是例如255.1? –

+1

關於你的單詞選擇的進一步評論:你的代碼的英文釋義是「如果不是a或b」。在你的標題和介紹性句子中,你說「不是a或不是b」,這與代碼中的邏輯不同。如果代碼顯示了您所需的邏輯,我建議編輯標題以閱讀「如果不是a或b」,並且您的第一句話讀取爲「不是255 *和*不是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

我看到的唯一解釋是r不是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已經提供了一個。

+0

感謝您的快速響應,R不是INT,但它的最大值是255,一個像素的紅色值,但我忘了在OP中提到這一點,我對此表示歉意。 – may19c19

相關問題