微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

尝试在随机生成 1 或循环 10 次后结束 while 循环

如何解决尝试在随机生成 1 或循环 10 次后结束 while 循环

(对于粗暴的格式我深表歉意)

我正在尝试制作一个随机生成器(最小 = 1,最大 = 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 “一个没有收到。”

解决方法

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

但是,如果您在初始化变量以跟踪您所做的事情之后再做这件事,而不是边走边检查,那么生成满足我假设的作业要求的方法会更容易。

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.");
    } 
}

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

,

您的主要问题是 Next() 在每次调用时返回一个新的随机整数,并且没有参数返回任何有效整数,因此您大约有 1/(2^32) 的机会获得 1。相反,您应该在每次迭代中调用一次并多次读取该结果。您的循环可能如下所示:

List<int> nums = new List<int>();
for(int i = 0; i < 10; ++i)
{
    nums.Add(randomNumber.Next(1,10));
    if(nums.Last() == 1)
    {
        break;
    }
}
Console.Write(String.Join(" ",nums) + " "); 
if(nums.Last() == 1)
{
    Console.WriteLine("A 1 was received after " + nums.Length + " attempts");
}
else
{
    Console.WriteLine("A 1 was not received.");
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。