2017-05-05 8 views
5

साथ मैं एक साधारण पाश जो इसपुनरावृत्ति MINVALUE से से MAXVALUE अतिप्रवाह

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

की तरह दिखना चाहिए दुर्भाग्य sbyte.MaxValue +1 = sbyte.MinValue तो यह कभी नहीं खत्म होने वाली शर्त पूरी करता है है। मेरा कामकाज int-128 से 127 पर उपयोग कर रहा था, लेकिन क्या मूल sbyte दृष्टिकोण भी है?

+0

मुझे लगता है कि लूप स्थिति में "=" को हटा देना पर्याप्त है .. –

उत्तर

5

सभी MaxValue को छोड़कर एक स्पष्ट

उत्पादन को ध्यान में ले जा रहा है, तो उत्पादन MaxValue

दृष्टिकोण, मैं एक समाधान देखते हैं।
यह काम करता है, लेकिन अजीब लग रहा है और फेंकता OverflowExceptionchecked अगर :)

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

क्षमा करें, यह एक गलती थी। यह कोड निश्चित रूप से काम करता है जैसा कि अब लिखा गया है! –

+0

@ मैथ्यू वॉटसन यह ठीक है :) बस इसे समझने की कोशिश करने में कुछ समय बिताया: डी –

1

आप के लिए इसे बदल अगर एक कर ... जबकि पाश आप सही सीमा प्राप्त कर सकते हैं: आप

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

तुम बस हालत के लिए एक int और sbyte अंदर उपयोग कर सकते हैं।

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

से बचाना पसंद करूंगा यह एक काम करता है! +1 – Toshi

संबंधित मुद्दे