2011-01-06 144 views
1

我正在研究一個名爲lingo的小文字遊戲,但我現在被卡住了。遊戲有兩個玩家;每名球員有一張卡,其中有25個數字介於1到70之間:第1組是偶數,第2組是奇數。重複的號碼是不允許的。偶數和奇數的隨機數字沒有重複

創建隨機數正在工作,但我沒有得到那些偶數和奇數。還刪除重複的號碼將無法正常工作。我試圖把這些數字放在ArrayList中,然後檢查數字是否已經在列表中,但它不起作用。

任何幫助,將不勝感激。我正在用C#編程。

+1

如果你描述你的需求正是,張貼代碼爲你嘗試過什麼可能有幫助,描述它是如何工作的(發佈錯誤信息,或發佈你看到的不良行爲),並解釋你想要發生的事情。 – 2011-01-06 18:08:13

+1

NOt確實是一個完整的答案,但要檢查數字是否均勻,可以通過檢查數字%2 == 0,然後數字是偶數來使用模數運算符。 – 2011-01-06 18:12:06

回答

2

編輯解釋:唉,這個數字必須是1和70之間?哈哈,那麼不要介意下面的建議;這絕對是過度的。

只需填充70個元素的列表,隨機播放它,然後遍歷它。

事情是這樣的:

List<int> numbers = Enumerable.Range(1, 70).ToList(); 

Shuffle(numbers); // You can find implementations all over the place. 

var evens = numbers.Where(x => x % 2 == 0).Take(25); 
var odds = numbers.Where(x => x % 2 == 1).Take(25); 

需要25個隨機偶數和25個隨機奇數?

怎麼是這樣的:

public static IEnumerable<int> GetInfiniteRandomNumbers() 
{ 
    var rand = new Random(); 
    while (true) 
    { 
     yield return rand.Next(); 
    } 
} 

然後25埃文斯和賠率:

var evens = GetInfiniteRandomNumbers().Where(x => x % 2 == 0) 
             .Distinct() 
             .Take(25) 
             .ToList(); 

var odds = GetInfiniteRandomNumbers().Where(x => x % 2 == 1) 
            .Distinct() 
            .Take(25) 
            .ToList(); 
2

創建一個包含數字1到70和shuffle它的列表。這將防止重複。然後,您可以將偶數給予一個團隊,將奇數給予另一個團隊。

0

的一種方法是:

  1. 填充兩個列表,一個從2偶數70,和一個從1到69的奇數因爲您填寫這些名單與數字序列,你知道沒有重複。
  2. 將這兩個列表隨機混合。在這裏,你重新排序的數字,而不是引入新的數字。

通常你會使用Fisher-Yates shuffle作爲Card Shuffling in C#