Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# C方法在应该返回唯一值时不返回唯一值_C#_Methods - Fatal编程技术网

C# C方法在应该返回唯一值时不返回唯一值

C# C方法在应该返回唯一值时不返回唯一值,c#,methods,C#,Methods,我有两种方法,generateUnphrase和generateVerbPhrase。VerbPhase将在一半时间内调用名词短语,其输出应为以下内容: 空地块将重新设置此金字塔的动画 粗体表示在逻辑上调用generateNounPhrase的位置。然而,真实输出的形式为: 空地块将重新设置空地块的动画 起初我认为我的randomIndex方法并没有像我预期的那样有效,但如果我再次运行这两种方法,我确实会得到不同的名词短语,但它们在句子的开头和结尾并不是唯一的 你知道为了得到一种方法来显示相同的

我有两种方法,generateUnphrase和generateVerbPhrase。VerbPhase将在一半时间内调用名词短语,其输出应为以下内容:

空地块将重新设置此金字塔的动画

粗体表示在逻辑上调用generateNounPhrase的位置。然而,真实输出的形式为:

空地块将重新设置空地块的动画

起初我认为我的randomIndex方法并没有像我预期的那样有效,但如果我再次运行这两种方法,我确实会得到不同的名词短语,但它们在句子的开头和结尾并不是唯一的

你知道为了得到一种方法来显示相同的结果,我做错了什么吗

private string generateNounPhrase()
{
    string nounPhraseString = "";
    nounPhraseString = nounMarkersStringList[randomIndex(0,nounMarkersStringList.Count-1)];
    if (included(1, 4, 2) == true)
    {
        nounPhraseString += " " + adjectivesStringList[randomIndex(0, adjectivesStringList.Count - 1)];
    }
    nounPhraseString += " " + nounsStringList[randomIndex(0, nounsStringList.Count - 1)];
    return nounPhraseString;
}

private string generateVerbPhrase()
{
    string verbPhraseString = "";
    if (included(1, 4, 2) == true)
    {
        verbPhraseString = intransitiveVerbsStringList[randomIndex(0, intransitiveVerbsStringList.Count - 1)];
    }
    else
    {
        verbPhraseString = transitiveVerbsStringList[randomIndex(0, transitiveVerbsStringList.Count - 1)] + " " + generateNounPhrase();
    }
    return verbPhraseString;
}

在没有看到randomIndex的代码的情况下,我无法确定,但每次调用randomIndex时,您可能都在创建Random类的新实例。如果你在很短的时间内做两次,就像你在这里做的那样,它会用相同的值对随机数生成器进行两次播种,因为它是用当前时间播种的,你会得到两次返回的相同的“随机”数


相反,您应该为所有randomIndex调用使用一个Random实例。

如果没有看到randomIndex的代码,我不能确定,但是每次调用randomIndex时,您可能都在创建Random类的新实例。如果你在很短的时间内做两次,就像你在这里做的那样,它会用相同的值对随机数生成器进行两次播种,因为它是用当前时间播种的,你会得到两次返回的相同的“随机”数


相反,您应该为所有randomIndex调用使用一个Random实例。

我高度怀疑您的randomIndex方法会产生以下效果:

Random r = new Random();
return r.Next (0, max);
上述代码的问题在于,当您在不同的时间运行它时,它会返回不同的值。但如果按以下方式运行,它几乎总是返回相同的值:

Console.WriteLine ("{0} == {1}?", randomIndex(0,10), randomIndex(0,10));
这是因为随机发生器使用当前时间作为种子。同时创建的2个随机化器将始终返回相同的值。正确的方法是:

class MyRand  // Assuming MyRand is the class name
{
   private Random r = new Random();
   public int GetRand(int min, int max)
   {
       return r.Next(min, max);
   }
}

或者,您可以将成员设置为静态。

我高度怀疑您的randomIndex方法会产生以下效果:

Random r = new Random();
return r.Next (0, max);
上述代码的问题在于,当您在不同的时间运行它时,它会返回不同的值。但如果按以下方式运行,它几乎总是返回相同的值:

Console.WriteLine ("{0} == {1}?", randomIndex(0,10), randomIndex(0,10));
这是因为随机发生器使用当前时间作为种子。同时创建的2个随机化器将始终返回相同的值。正确的方法是:

class MyRand  // Assuming MyRand is the class name
{
   private Random r = new Random();
   public int GetRand(int min, int max)
   {
       return r.Next(min, max);
   }
}

或者,您可以将成员设置为静态。

您说得对,我正在创建一个新实例,所有这些都是在单击一个按钮后发生的,因此它将在毫秒内非常接近。当我回来工作的时候,我会按照你的建议去做,然后再看一遍代码。工作很愉快。非常感谢你!你是对的,我正在创建一个新实例,所有这些都是在点击一个按钮后发生的,所以它将在毫秒内非常接近。当我回来工作的时候,我会按照你的建议去做,然后再看一遍代码。工作很愉快。非常感谢你!