2013-10-23 82 views
0

我正在試圖製作一個Rock Paper Scissors遊戲作爲我的第一個'項目',所以我需要計算機從1-3生成一個隨機數來表示輪到他們。無法生成隨機數Visual C#

我一直想這個代碼,但我想不出爲什麼它不工作:

Random rnd = new Random(); 
int pchand= rnd.Next(1, 4); 

有一個紅色波浪線下方RND,上面寫着:

A field initializer cannot reference the non-static field, method, or property FileName.Form1.rnd 

感謝您的任何幫幫我!

+0

你可以包含Form1的代碼嗎? –

+2

你把它放在方法裏面嗎?或者只是在課堂上? – Andrey

+2

這是一個令人難以置信的不好主意:'int pchand = new Random()。Next(1,4);' –

回答

10

問題在於,您是在課堂級別而不是功能級別進行此操作。

在課堂上宣佈你是隨機的,但創建pchand應該在一個函數內完成。

喜歡的東西:

public class Test 
{ 
    static Random rnd = new Random(); 

    public static void Main() 
    { 
     int pchand = rnd.Next(1, 4); 
    } 
} 

爲什麼你原來的嘗試會導致編譯時錯誤是因爲編譯器不保證其字段初始化順序的原因。因此,在使用之前,不能保證rnd將被設置。因此,編譯器會阻止您這樣做,以避免在運行時出現意外的空引用錯誤。


注到OP:包括你的代碼更加延長樣品將允許進行更具體的解決您的問題,但我希望我的示例代碼是通用讓你瞭解你需要做什麼

+0

+1,但請解釋爲什麼「創建pchand應該在一個函數內完成」 – Tarik

+1

@Tarik:爲了避免錯誤? :P ...會在 – musefan

+0

中添加一些東西你顯然正在處理一個初學者。讓我們試着幫助他理解**爲什麼**,而不僅僅是**他應該修正什麼**。 – Tarik