2017-05-05 57 views
5

我有一個簡單的循環,這看起來應該像這樣迭代從MINVALUE到MaxValue的溢出

for (sbyte i = sbyte.MinValue; i <= sbyte.MaxValue; i++) 
{ 
    Console.WriteLine(i); 
} 

不幸sbyte.MaxValue +1 = sbyte.MinValue所以這從來沒有滿足結束條件。我的解決方法是從-128127使用int,但是是否還有一個本地sbyte方法?

+0

我認爲在循環條件中刪除「=」應該就足夠了.. –

回答

5

不考慮明顯

輸出以外的所有MaxValue,然後輸出MaxValue

的做法,我看到一個解決方案。
它的工作原理,但看起來怪異,並拋出OverflowException如果checked :)

sbyte i = sbyte.MinValue; 
do 
{ 
    Console.WriteLine(i++); 
} while (i != sbyte.MinValue); 
+2

對不起,這是一個錯誤。這段代碼絕對有效,因爲它現在寫成! –

+0

@MthetheWWatson沒關係:)只花了一些時間試圖弄清楚:D –

1

如果將其更改爲do ... while循環,你可以得到正確的範圍:

sbyte i = sbyte.MinValue; 
do 
{ 
    Console.WriteLine(i); 
    i++; 
} 
while(i != sbyte.MaxValue); 
Console.WriteLine(i); 
+0

這隻返回到126 - 我還需要'sbyte.MaxValue'(127) – Toshi

+0

它需要一個額外的WriteLine調用以外的循環。我編輯了答案 –

+0

另外一個'WriteLine'是我想要避免的難看的方式 – Toshi

3

你可以試試這個:

for (sbyte i = sbyte.MinValue; i <= sbyte.MaxValue; i++) 
{ 
    Console.WriteLine(i); 
    if(i==sbyte.MaxValue) 
    break; 
} 
2

您可以使用只爲條件的intsbyte內。

int checkVal = sbyte.MinValue; 
for (sbyte i = sbyte.MinValue; checkVal <= sbyte.MaxValue; i++, checkVal++) 
{ 
    Console.WriteLine(i); 
} 
+1

這個作品! +1 – Toshi

相關問題