2011-03-06 37 views
1

我有两种方法,generateNounPhrase()和generateVerbPhrase()。主谓短语将呼吁NounPhrase一半的时间,它的输出输出应该到的效果:C#方法不返回一个唯一的值,当它应该是

空地重新动画这个金字塔

(粗体,表示其中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; 
} 

回答

4

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

相反,您应该对所有randomIndex调用使用Random的单个实例。

+0

你是对的我正在创建一个新的实例,所有这一切发生在点击一个按钮后,因此它将非常接近(在毫秒之内)。当我回到工作中时,我会按照您的建议来看看,并且可以再次查看代码。 – Windos 2011-03-07 00:03:04

+0

工作过。非常感谢! – Windos 2011-03-07 01:00:58

1

我强烈怀疑你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); 
    } 
} 

或者,您可以使成员静态。

+0

+1例如。工作过一种享受。 – Windos 2011-03-07 01:02:14

相关问题