我正在尝试制作一台电脑。电脑猜谜游戏。我已经在python和matlab上完成了它,但我很难用c#做它。
我不认为应用程序正在执行循环,但是当使用调试器逐步执行应用程序时,它似乎按预期工作。
using System;
using static System.Console;
namespace ComVsCom
{
class ComVsCom
{
static void Main(string[] args)
{
int rand, comp, pick = 0;
bool tri = false;
Random number = new Random();
rand = number.Next(1, 10);
Random computer = new Random();
comp = computer.Next(1, 10);
while (comp != rand && tri == false)
{
if (comp > rand)
WriteLine("Guess again you are too high!");
if (comp < rand)
WriteLine("Guess again you are too low!");
pick++;
WriteLine("{0} attempt", pick);
comp = computer.Next(1, 10);
if (comp == rand)
{
WriteLine("You got it! it took you {0} times the number was {1}", pick, rand);
tri = true;
}
}
}
}
}
正常运行程序,它终止没有输出。但是,调试给定的输出是预期的,如下所示:
Guess again you are too high!
3 attempt
Guess again you are too low
6 attempt
You got it! it took you 3 times the number was 6
为什么在使用调试器时这是有效的,而不是在正常运行程序时呢?
答案 0 :(得分:3)
问题几乎肯定是你永远不会进入循环:
请参阅https://msdn.microsoft.com/en-us/library/h343ddh9(v=vs.110).aspx
默认种子值源自系统时钟并具有有限的分辨率。因此,通过调用默认构造函数紧密连续创建的不同Random对象将具有相同的默认种子值,因此将生成相同的随机数集。
您在开始时创建两个Random,然后在每个Random上调用完全相同的方法。正如基于文档所预期的那样,它们产生完全相同的结果。在循环条件中,您检查它们是否不同 - 它们不是,所以永远不会输入循环。因为你的所有程序逻辑都在那个循环中,所以它都不会发生。
请注意,调试时的不同行为可能是由于逐步构建Randoms,使它们在不同的时间发生,因此它们将具有不同的种子值并产生不同的序列。