当前位置: 首页 > 知识库问答 >
问题:

无法在循环中创建不同的随机数

祁景山
2023-03-14

我是C#新手,在我创建的这个随机数猜谜游戏中,我很难理解哪里出错了。我试图在第30行的do time循环中添加一个random.next命令,当我运行程序时,它会说我的猜测太高或太低,我不明白出了什么问题。这是未完成的代码:

    static void Main(string[] args)
    {
        Random random = new Random();
        int numberToGuess = random.Next(100) + 1;
        int userGuess = 0;
        string name;

        Console.WriteLine("What is your name?");
        name = Convert.ToString(Console.ReadLine());

        Console.WriteLine("In this game you need to guess which number the computer has picked in the range of 1 to 100."
            + Environment.NewLine + "If the number you enter is too high or too low the program will display this, " +
            Environment.NewLine + "try to make the least amount of guesses as possible!" + Environment.NewLine 
            + "==========================================================================================================");

        do
        {

            do
            {
                Console.Write("Enter your guess: ");
                userGuess = Convert.ToInt32(Console.ReadLine());

                if (userGuess > numberToGuess)
                {
                    Console.WriteLine(userGuess + " is too high!");
                }
                else if (userGuess < numberToGuess)
                {
                    Console.WriteLine(userGuess + " is too low!");
                }
                else
                {
                    Console.WriteLine(userGuess + " SPOT ON! Congratulations.");
                }

                numberToGuess = random.Next(100) + 1;

            } while (userGuess != numberToGuess);

            Console.WriteLine("Do you want to continue?");
        } while (Console.ReadLine().ToUpper() == "YES");


    }

如果我删除numberTo猜测=随机。下一个(100)1;代码工作正常,但重复相同的随机数。

请帮忙。

共有3个答案

夏侯自珍
2023-03-14

此方法将返回一个真正的随机数。

公共共享函数R的整数(最小值为整数,最大值为整数)作为整数暗淡兰德作为新系统。安全性。密码学。RNGCryptoServiceProvider暗淡缩放为Uintger=Uintger。MaxValue同时缩放=Uintger。MaxValue'获取四个随机字节。暗淡four_bytes作为字节()=新字节(3){}兰德。GetBytes(four_bytes)

            ' Convert that into an uint.
            scale = BitConverter.ToUInt32(four_bytes, 0)
        End While

        ' Add min to the scaled difference between max and min.
        Return CInt(min + (max - min) * (scale / CDbl(UInteger.MaxValue)))
    End Function

<代码><代码>

汤洋
2023-03-14

您的猜测范围非常高1到100,每次您都再次生成随机数。例如,只需减小您的随机生成器大小

 int numberToGuess = random.Next(5) + 1;

首先检查它是否工作良好,然后考虑扩展它。

尚楚
2023-03-14

调试您的应用程序替换

Console.Write("Enter your guess: ");

具有

Console.Write("Enter your guess (" + numberToGuess + "): ");

你会看到数字猜测每次都在变化。。。您应该注释该行,并仅使用生成的第一个随机数。

 类似资料:
  • 我正在尝试使用For循环将一个随机整数(0-2)添加到一个变量中指定的次数。我遇到的问题是,循环不是每次循环时都使用一个新的随机数,所以,如果我输入9,我只能得到0、9,或者18。 我希望一个对象返回的键“a”和“b”具有不同的数值。

  • 在本例中,最大值仅为5,因此我可以逐个检查副本,但如何以更简单的方式执行此操作?例如,如果最大值为20,该怎么办?谢谢

  • 问题内容: 出于示例目的… 所以我最终得到了string1,string2,string3 …都等于 问题答案: 但实际上将一个值与另一个值相关联的最佳方法是字典。这就是它的设计目的!

  • 有没有一种方法可以在NetworkX甚至没有NetworkX的情况下做到这一点?

  • 我有一个的数组,它的值不同,称为。我想创建一个二维数组(称为),其中第一个维度的大小是数组的长度,第二个维度的大小是该索引处的整数值。我希望下面的代码能更容易理解我的问题。 我的实际代码,sizes数组更大,所以如果可能的话,我希望避免大量重复的代码行。 我是的新手,但我读过关于的文章。我想我可以创建一个函数来返回这个数组,但是我还没有让它工作。 我还认为我可以循环数组,并为每个创建一个具有该大小