[英]Random number generator in a class method
這是類類中方法的一部分。 我的目標是生成一個隨機數,該數字將存儲在名為iCell的變量中。 之后,iCell將用於switch語句以更改字符,單元格。 我從iCell = Random.Next(1,9);
得到一個錯誤iCell = Random.Next(1,9);
這行說“錯誤,非靜態字段,方法或屬性'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;
}
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'));
...
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.