C#猜测随机数

时间:2017-10-10 10:57:27

标签: c# random

我将标识符更改为英语,因此可以在Code Review上轻松理解。我使用了重构器,所以它会立即改变,但是当它出错时。我的代码不再起作用了。但是代码没有完成。我仍然需要找到一种方法再次发挥。我在这做错了什么?

目标:

创建一个控制台应用程序,您需要猜测随机生成的数字介于1和100之间。当您的猜测低于生成的数字时,它会说更高。如果它高于生成的数字,它会说更低。检查代码中的注释。

 public static void Main(string[] args)
 {
     const int STOPVALUE = 0;
     int inputNumber, count = 0;

     Random generator = new Random();

     int gameNumber = generator.Next(1, 100);

     //I output the game number to see beforehand want the winning number is.
     //The generator is doing it's job right.
     Console.WriteLine(gameNumber);

     //Here is where it goes wrong and i can't seem to understand why.
     //It keeps saying go higher even when the input number is 100.
     do
     {
         Console.Write("(Stop Value: 0) Insert a number: ");
         inputNumber = int.Parse(Console.ReadLine());

         count++;

         if (gameNumber == inputNumber)
         {
             Console.WriteLine("Your guess is correct.");
             Console.WriteLine("Number of turns: " + count);

             count = 0;

             Console.WriteLine("Play again? (Y/N)");
             char startOver = char.Parse(Console.ReadLine());

             if (startOver == 'Y')
             {
                 return;
             }

             if (startOver == 'N')
             {
                 Environment.Exit(0);
             }
         }

         if (inputNumber > gameNumber)
         {
             Console.WriteLine("Higher");
         }

         if (inputNumber < gameNumber)
         {
             Console.WriteLine("Lower");
         }
     } 
     while (inputNumber != STOPVALUE);
 }

2 个答案:

答案 0 :(得分:4)

正如Pikoh所说,只是颠倒了条件。尝试分解代码并亲自查看:

假设游戏生成了一个秘密号码42。 假设您选择了数字50。

然后你会看到这种情况:

if (50 > 42)
{
    Console.WriteLine("Higher");
}

if (50 < 42)
{
    Console.WriteLine("Lower");
}

所以它会被“解释”为:

{{1}}

您可以看到您的逻辑不正确。当数字低时,它会告诉你降低;当数字很高时,它会告诉你更高。

您也可以参考这个答案: https://stackoverflow.com/a/46665389/4352946

答案 1 :(得分:1)

再次玩游戏: 当用户按Y时,您正在调用退出该功能的return。 您可以放置​​一个无限循环(如while(true))将代码从int gameNumber = generator.Next(1, 100);打包到最后,然后将return更改为break。 这将退出内循环并返回到新循环,从而生成一个新数字并重新开始。