2013-12-15 1 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가 그것을 얻은 티켓에 대한 일종의 링크를 포함하고 있다고 가정하기 때문에 루프에서 그것을 지정해야합니다.

그렇지 않으면 상금 등급을 확인하지 않고도 더 나은 답변을 드릴 수 없습니다.

0

List의이 (정확히 당신이 일이 기대하는 것을 우리에게 말하고)를 ListnCount의를 들어, 인덱스가 0에서 n-1로 이동 즉, 제로 기반.

ticketNumberdraw.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. 
    } 
의 문제가 될 것이다립니다
관련 문제