我正在抽奖,用户输入奖品并出售门票。每张门票都有买家和他的名字,电话等。我剩下的就是画一张中奖彩票并将奖品分配给它:
{
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);
}
我有这个代码,但是当我运行它时没有任何反应。我一直在寻找并试图找到答案但是已经停留了2天而且我还有更多方法。
答案 0 :(得分:0)
是的,所以你正在绘制一个票号,然后对号码本身一无所知。当循环重新循环时,该值超出范围并永远消失。
从你的代码中我假设Prize包含某种获得它的Ticket的链接,所以你需要在循环中分配它。
否则,如果没有看到您的奖品类确认,就无法给出更好的答案。 (并告诉我们你期望发生什么)
答案 1 :(得分:0)
List
是从零开始的,这意味着对于List
Count
n
,索引从0
变为n-1
}。
您的ticketNumber
应该是draw.Next(0, ticketCount)
,或者draw.Next(ticketCount)
。
但是,一旦你拿到中奖号码,你也不会对ticketNumber
做任何事情。
答案 2 :(得分: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.
}