2016-02-28 113 views
-2

爲什麼這不起作用? 它是在視覺studo 2015,窗形成應用C#將隨機轉換爲int visual studio 2015

namespace guessing 
{ 
    public partial class Form1 : Form 
    { 
     Random rnd = new Random(); 
     int rndm = rnd.Next(1, 13); 

有下RND一個錯誤,這表示:

「A字段初始不能引用非靜態字段,方法,或 property'Form1.rnd'「

+4

也許你想寫一個方法中的這些行,就像'Main'也許? –

回答

6

在C#中,語句不能立即在類聲明下發生。他們需要成爲功能或方法的一部分。

namespace guessing 
{ 
    public partial class Form1 : Form 
    { 
     void MethodX() 
     { 
      Random rnd = new Random(); 
      int rndm = rnd.Next(1, 13); 
      /* to be continued... */ 
     } 
    } 
} 
+1

注意這是非常不可靠的代碼;如果'MethodX'在一個循環中被調用,它可以使用相同的'Random'種子並偏向'Next'的結果。 'rnd'應該可以是一個在構造函數中初始化的類變量。當然是 –

+0

。只是爲了讓代碼編譯來啓動OP。沒有他的功能意圖的假設。 – dlatikay

+1

@dlatikay:如果你返回int,這將是值得回答的。 –

-1

試試這個:

namespace guessing 
{ 
    public partial class Form1 : Form 
    { 
     int rndm = new Random().Next(1, 13); 

編輯

針對TomTom公司:

有很多方法可以解決這個。如果您需要始終提供Random的實例,請在課程級別上定義它,就像您已有的一樣。

namespace guessing 
{ 
    public partial class Form1 : Form 
    { 
     Random rand = new Random(); 
     int rndm = new Random().Next(1, 13); 

     // Or make it static. 
     static Random rand = new Random(); 
     int rndm = Form1.rand.Next(1, 13); 

     // Or a method 
     private int GetRandomInteger() 
     { 
      return new Random().Next(1, 13); 
      // or call your class level instance of Random 
     } 
+0

我會-1,因爲它有不同的語義。具體來說,你無法從相同的隨機實例中獲得另一個隨機數。 – TomTom

+0

@TomTom:@Tal在類級別上定義了「int」變量。我假設塔爾想要一個隨機數字。你假設塔爾想要有數百個隨機數字。 –

+0

其實沒有。我認爲塔爾在這裏讀了規則,並提出了一個非常簡單的例子來證明問題。我真的假設他不想要一個隨機數,只是以此爲例。 – TomTom

0

是的,就像SonerGönül說的那樣,你必須將這段代碼添加到Form中的Method中。因爲您可能使用設計器創建了表單,只需轉到事件並創建一個方法created(或類似)。然後將您的代碼放入創建的方法的主體中。