为什么这个while循环是一个无限循环?

4
我希望执行循环的内容最多只执行3次,并且每次程序执行时,我希望它生成不同的数字。因此第一次运行可以是2,然后是3,然后是1,然后是2等等...
这是我编写的代码:
       int i = new Random().Next(3);
        while (i <= 3)
        {

            Console.WriteLine("Hello World");

            i--;
        }**

然而,这将导致一个无限循环。有人能帮我理解我错在哪里吗?
谢谢!

1
这不是一个“无限”的循环,但它会循环非常长的时间(比如说,大约20亿次迭代直到下溢,因为写入控制台需要花费可观的时间)。变量i的初始值为0、1、2,所以随机数是一个无用的不相关细节。考虑使用:int i = 2 /* Random.Next(3)的最大值 */; while (i <= 3) { ..; i-- } - user2864740
4个回答

3
您总是在递减变量,所以它始终小于3。

6
实际上,你最终将达到int.MinValue,在另一个i--后,你会得到int.MaxValue。但我相信这不是OP想要的 :) - MarcinJuraszek
1
当无限趋近于非常小的值时,它就是无穷大。 - aquinas
@MarcinJuraszek,所以C#实际上是在达到最小值后“循环”到最大值吗? - ylun.ca
1
@ylun 是的,这就是所谓的溢出。您可以在 MSDN 上阅读相关内容:http://msdn.microsoft.com/zh-cn/library/74b4xzyw.aspx - MarcinJuraszek
@MarcinJuraszek 谢谢,我之前不知道这个。这非常有趣。 - ylun.ca

1

我将永远小于3...直到它达到Int.MinValue - 1(溢出)。


1
你正确的做法应该是设置最小值和最大值,例如下面的方式。
int i = new Random().Next(3);

while (i>0 && i <= 3)
    {

        Console.WriteLine("Hello World");

        i--;
    }**

1
我认为如果你将代码中的'i--'改为'i++',你就能得到你想要的结果。
int i = new Random().Next(3);
        while (i <= 3)
        {

            Console.WriteLine("Hello World");

            i++;
        }**

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接