2014-03-28 35 views
1

這是類類內部方法的一部分。我的目標是生成一個隨機數,該數字將被存儲在一個名爲iCell的變量中。之後,iCell將用於switch語句來更改字符,單元格。我從iCell = Random.Next(1,9);行中得到一個錯誤,指出「Error,對象引用對於非靜態字段,方法或屬性'System.Random.Next(int,int)'''是必需的。在類方法中不可能有一個隨機數生成器?類方法中的隨機數生成器

public void CPUMove() //method marks cell for CPU 
    char cell; 
    int iCell; 
    Random rand = new Random(); 
    iCell = Random.Next(1, 9); 
    switch (iCell) 
    { 
     case 1: 
      cell = '1'; 
     break; 
     case 2: 
      cell = '2'; 
     break; 
     case 3: 
      cell = '3'; 
     break; 
     case 4: 
      cell = '4'; 
     break; 
     case 5: 
      cell = '5'; 
     break; 
     case 6: 
      cell = '6'; 
     break; 
     case 7: 
      cell = '7'; 
     break; 
     case 8: 
      cell = '8'; 
     break; 
     case 9: 
      cell = '9'; 
     break; 
    } 
+0

搜索網頁或本網站_「的對象引用需要非靜態字段,方法或屬性」 _。 – CodeCaster

回答

6
iCell = rand.Next(1, 9); 

使用您已經創建的對象。

請注意,您應該在您的程序中創建此Random實例一次。也許你可以把它變成一個類變量,甚至是一個靜態類變量。

3

你想rand.Next而不是Random.Next讓你引用剛剛創建

同樣的情況下,你可以擺脫那個大switch語句。只寫:

cell = iCell.ToString()[0]; 
2

除了其他答案:更好地使Random實例靜態。

class MyClass { 
    static Random rand = new Random(); 

    public void CPUMove() { //method marks cell for CPU 
     char cell; 
     int iCell; 
     iCell = rand.Next(1, 9); 
     cell = iCell.ToString()[0]; 
    } 
} 
1

你可以那樣做:

// Simplest case, not thread safe 
// The same generator for all CPUMove() calls 
private static Random rand = new Random(); 

// method marks cell for CPU 
public void CPUMove() { 
    // Don't re-create Random each time you need a random value: 
    // the values generated will be badly skewed 
    // Random rand = new Random(); 

    // You don't need any switch/case here, just a conversion 
    Char cell = (Char) (rand.Next('1', '9')); 
    ... 
}