类方法中的随机数生成器

本文关键字:随机数生成器 类方法 | 更新日期: 2023-09-27 17:54:19

这是类class内部方法的一部分。我的目标是生成一个随机数,这个随机数将存储在一个名为iCell的变量中。在此之后,iCell将用于switch语句来更改字符cell。我从iCell = Random.Next(1,9);行得到一个错误,上面写着"错误,非静态字段,方法或属性需要对象引用"System.Random。下一个(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;
    }

类方法中的随机数生成器

iCell = rand.Next(1, 9);

使用已经创建的对象。

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

你想要rand.Next而不是Random.Next,这样你就引用了你刚刚创建的实例

还可以去掉大的switch语句。只写:

cell = iCell.ToString()[0];

除了其他答案:最好将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];
    }
}

你可以这样做:

// 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')); 
  ...
}