【问题标题】:C# Guess random numberC# 猜随机数
【发布时间】:2017-10-10 10:57:26
【问题描述】:

我将标识符更改为英文,以便在 Code Review 上易于理解。我使用了重构,所以它立即改变了所有地方,但那是它出错的时候。我的代码不再工作了。虽然代码没有完成。我仍然需要找到重新玩的方法。我在这里做错了什么?

目标:

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

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

【问题讨论】:

  • 假设您了解您拥有的代码 - 究竟是什么阻止了您继续“再次播放”部分?
  • 只需颠倒条件即可。代码正在做你告诉它做的事情。 if (inputNumber &gt; gameNumber) 因此,当输入为 100(可能大于随机数)时,您输出“更高”

标签: c# random


【解决方案1】:

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

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

然后你会看到这种情况:

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

if (inputNumber < gameNumber)
{
    Console.WriteLine("Lower");
}

所以它会被“解释”为:

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

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

如您所见,您的逻辑不正确。当数字较低时,它会告诉您降低;当数字很高时,它会告诉您更高。


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

【讨论】:

  • 多么荒谬的错误。我的逻辑确实是错误的。我连续练习了好几个小时。我想当我写这个程序时,我的大脑停止使用逻辑了。嗯,这就解释了一切!
【解决方案2】:

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

【讨论】:

  • 这不是 OP 的问题。 “当你的猜测低于生成的数字时,它会说更高。如果它高于生成的数字,它会说更低。”
  • @Droppy Quoting OP:我还需要想办法再玩一次。用他贴的代码,他肯定玩不下去了。
  • 那么应该是continue;,而不是break;
  • @Droppy 这将再次运行他的内部 do-while 而不是退出该循环。
  • 我的错 - 没看到他有空。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-29
  • 2019-06-02
  • 2017-01-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多