2011-03-06 56 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

相關問題