类方法中的随机数生成器

时间:2014-03-28 09:56:31

标签: c# class random non-static

这是类类内部方法的一部分。我的目标是生成一个随机数,该数字将存储在名为iCell的变量中。之后,iCell将用于switch语句来更改字符,单元格。我从iCell = Random.Next(1,9);行收到错误,说明"错误,非静态字段,方法或属性需要对象引用System.Random.Next(int,int )'&#34 ;.是否有可能在类方法中使用随机数生成器?

 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;
    }

4 个答案:

答案 0 :(得分:6)

iCell = rand.Next(1, 9);

使用您已创建的对象。

请注意,您应该在程序中创建此Random实例一次。也许你可以把它变成类变量甚至是静态类变量。

答案 1 :(得分:3)

您想要rand.Next而不是Random.Next,以便您引用刚刚创建的实例

此外,你可以摆脱那个大的switch语句。只需写下:

cell = iCell.ToString()[0];

答案 2 :(得分: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];
    }
}

答案 3 :(得分: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')); 
  ...
}