这是类类内部方法的一部分。我的目标是生成一个随机数,该数字将存储在名为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;
}
答案 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'));
...
}