2013-12-15 31 views
0

我正在做抽獎,用戶輸入獎品並出售票。每張票都有一個買主,他的名字,電話等等。我已經離開了,我們要抽出一張中獎票,並分配獎品它:從容器中抽取一張隨機票

{ 
    private Random draw = new Random(); 
    private List<Ticket> ticketContainer = new List<Ticket>(); 
    private List<Prize> prizes = new List<Prize>(); 

    public List<Prize> DoDraw() 
    { 
     int ticketCount = ticketContainer.Count; 

     foreach (var prize in prizes) 
     { 
      int ticketNumber = draw.Next(1, ticketCount + 1); 


     } 
     return prizes; 
     Console.WriteLine(prizes); 
    } 

我有這樣的代碼,但是當我運行它沒有happens.Ive一直在尋找,並試圖找到答案,但一直停留2天,我triend幾個方面。

回答

0

對,所以你正在畫一張票號,然後對號碼本身做什麼都不做。當循環重新循環時,該值超出範圍並永遠消失。

從你的代碼中,我假設Prize包含某種鏈接到獲得它的Ticket,所以你需要在循環中指定它。

否則,如果沒有看到您的獎類確認,它是不可能給出更好的答案。 (和告訴我們,正是你期待發生什麼)

0

List s爲從零開始,這意味着對於Countn一個List,指數從去到0n-1

您的ticketNumber應該是draw.Next(0, ticketCount)或者draw.Next(ticketCount)

但是,一旦你想出一箇中獎號碼,你也不會對ticketNumber做任何事情。

0

你找到一個索引,但實際上並沒有做任何事情。

您還可以嘗試使繪圖單獨分類並返回並刪除每個DoDraw的隨機票。

class Draw 
{ 
    private Random draw = new Random(); 
    private List<Ticket> ticketContainer = new List<Ticket>(); 
    private List<Prize> prizes = new List<Prize>(); 

    public Prize DoDraw() 
    { 
     int ticketCount = ticketContainer.Count; 

     int ticketNumber = draw.Next(1, ticketCount + 1); 

     var result = prizes[ticketNumber]; 
     prizes[ticketNumber] = prizes[prizes.Count - 1]; // Put last element in the returned elements place 
     prizes.RemoveAt(prizes.Length - 1); 
     return result; 
    } 

製作n吸引那麼將是

Draw draw = // create it... 
    for (var i = 0; i < n; i++) { 
     var ticket = draw.DoDraw(); 
     Console.WriteLine(ticket); // Do something appropriate. 
    } 
問題