2017-05-05 15 views
5

Tôi có một vòng lặp đơn giản mà sẽ trông như thế nàylặp từ MINVALUE đến MAXVALUE với tràn

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

may sbyte.MaxValue +1 = sbyte.MinValue vì vậy đây không bao giờ đáp ứng được các điều kiện kết thúc. Giải pháp của tôi đã sử dụng int từ -128 đến 127 nhưng cũng có cách tiếp cận gốc sbyte không?

+0

Tôi nghĩ rằng việc xóa "=" trong điều kiện vòng lặp là đủ .. –

Trả lời

5

Không tính đến một rõ ràng

đầu ra tất cả trừ MaxValue, sau đó sản lượng MaxValue

cách tiếp cận, tôi thấy một giải pháp.
Nó hoạt động, nhưng trông lạ và ném OverflowException nếu checked :)

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

Xin lỗi, đó là một sự nhầm lẫn. Mã này chắc chắn hoạt động như nó được viết ngay bây giờ! –

+0

@MatthewWatson Nó là ok :) Chỉ cần dành một số thời gian cố gắng tìm ra: D –

1

Nếu bạn thay đổi nó vào một vòng lặp do ... while bạn có thể có được phạm vi chính xác:

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

điều này trả về chỉ lên đến 126 - tôi cũng cần 'sbyte.MaxValue' (127) – Toshi

+0

Nó cần một cuộc gọi WriteLine bổ sung bên ngoài vòng lặp. Tôi đã chỉnh sửa câu trả lời –

+0

một bổ sung 'WriteLine' là cách xấu xí tôi muốn tránh – Toshi

3

Bạn có thể hãy thử điều này:

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

Bạn chỉ có thể sử dụng int chỉ cho điều kiện và sbyte bên trong.

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

công cụ này hoạt động! +1 – Toshi

Các vấn đề liên quan