簡體   English   中英

類方法中的隨機數生成器

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM