首页 > 解决方案 > 尝试在随机生成 1 或循环 10 次后结束 while 循环

问题描述

(我为糟糕的格式道歉)

我正在尝试制作一个随机数生成器(min = 1,max = 10),它会循环直到

a) 生成一个 1(作为主要哨兵)。b) 循环迭代 10 次(次要哨兵)而不产生 1。

我正在寻找这样的东西:

6 3 8 4 1 “在 5 次尝试中收到了一个”,

或者

3 8 5 7 2 2 4 8 8 3 “从未收到过一个。”

但问题是即使生成了 1,循环也会继续,并且“从未收到过 A”。消息显示。循环如下:

while (randomNumber.Next() != 1 || loopCounter <= 10));
{
    loopCounter++;
    Console.WriteLine(randomNumber.Next(10));
    Thread.Sleep(100);
    if (randomNumber.Next() == 1)
    {
        Console.WriteLine($"A one was recieved in {loopCounter} attempts.")
        break;
    }
    if (loopCounter <= 10)
    {
        Console.WriteLine("A one was not recieved.")
        break;
    }
}

给予类似的东西

1 4 6 9 7 1 3 3 1 9 “没有收到一个。”

标签: c#randomwhile-loopterminatesentinel

解决方案


您或多或少有正确的想法来推断是否满足这两个条件中的每一个(除了睡眠线程?)。

但是,如果您在初始化变量以跟踪您正在做的事情之后执行此操作,而不是在进行过程中进行检查,则更容易产生一种满足我假设是家庭作业问题的要求的方法。

Random rand = new Random();
int randomNumber = 0;

int maxLoops = 10;
string numbersSoFar = "";

for (int i = 1; i <= maxLoops; i++)
{
    //Generate random number between 1 and 10:
    randomNumber = rand.Next(1, 10);
    numbersSoFar += randomNumber + " ";
    
    if (randomNumber == 1)
    {
        Console.WriteLine(numbersSoFar);
        Console.WriteLine("1 was found on loop number: " + i);
        break;
    }
    else if (i == 10)
    {
        Console.WriteLine(numbersSoFar);
        Console.WriteLine("10 loops completed, no 1 found.");
    } 
}

由于其中一个条件是您拥有最大数量的循环,因此您可以在 a 中使用它for loop,而不是在 while 循环中使用它,让您可以访问要iterator比较的立即数,而不是声明与 while 循环耦合的额外值。这样它就会自动终止,因为在您的问题中,您还需要一个突破/终止条款。


推荐阅读