C#将对象添加到列表
我刚开始学习c#,我正在创建的程序有点问题 我正在创建一个程序,它将创建一个彩票号码,每个号码有一个ID和六个随机生成的号码 下面是我创建票据并将其添加到列表中的代码C#将对象添加到列表,c#,list,sortedset,C#,List,Sortedset,我刚开始学习c#,我正在创建的程序有点问题 我正在创建一个程序,它将创建一个彩票号码,每个号码有一个ID和六个随机生成的号码 下面是我创建票据并将其添加到列表中的代码 Random random = new Random();// Random number generator for (int i = 0; i < 1000; i++) { do { int randomNumber = random.Next(1, 42);// Create randoms n
Random random = new Random();// Random number generator
for (int i = 0; i < 1000; i++)
{
do
{
int randomNumber = random.Next(1, 42);// Create randoms numbers between 1 and 42
ticketNumbers.Add(randomNumber);// Add the random numbers to the ticketNumbers SortedSet
}
while (ticketNumbers.Count< 6);// Stop Adding once the six numbers is reached
CTicket firstTicket;
firstTicket = new CTicket(i, ticketNumbers);// Create ticket object pass i's current value as the ticket id and pass the ticketNumbers sorted set as the ticket numbers
ticketList.Add(firstTicket);// Add the firstTicket object to the ticketList
ticketNumbers.Clear();// clear the ticketNumbers list to start again for the next ticket
}
CTicket.Printlist(ticketList);
似乎也正在清除列表中用于创建对象的所有以前的票号
有人能解释一下为什么会发生这种情况吗?当您创建CTicket实例时
firstTicket = new CTicket(i, ticketNumbers);
TicketNumber是对正在传递给CTicket类的SortedSet实例的引用。所有CTicket实例都包含对同一SortedSet实例的引用副本。清除该选项后,所有CTicket将引用相同的空集
解决方案是为每个CTicket创建一个新的ticketNumber集合,然后每个CTicket将包含对不同集合的引用
Random random = new Random();// Random number generator
for (int i = 0; i < 1000; i++)
{
SortedSet<int> ticketNumbers = new SortedSet<int>();
do
{
int randomNumber = random.Next(1, 42);// Create randoms numbers between 1 and 42
ticketNumbers.Add(randomNumber);// Add the random numbers to the ticketNumbers SortedSet
}
while (ticketNumbers.Count< 6);// Stop Adding once the six numbers is reached
CTicket firstTicket;
firstTicket = new CTicket(i, ticketNumbers);// Create ticket object pass i's current value as the ticket id and pass the ticketNumbers sorted set as the ticket numbers
ticketList.Add(firstTicket);// Add the firstTicket object to the ticketList
ticketNumbers.Clear();// clear the ticketNumbers list to start again for the next ticket
}
CTicket.Printlist(ticketList);
Random Random=new Random();//随机数发生器
对于(int i=0;i<1000;i++)
{
SortedSet TicketNumber=新的SortedSet();
做
{
int randomNumber=random.Next(1,42);//创建介于1和42之间的随机数
ticketNumbers.Add(randomNumber);//将随机数添加到ticketNumbers SortedSet
}
while(ticketNumbers.Count<6);//一旦达到六个数字,就停止添加
CTicket第一票;
firstTicket=new-CTicket(i,ticketNumbers);//创建ticket对象,将i的当前值作为票证id传递,并将已排序的票证编号作为票证编号传递
ticketList.Add(firstTicket);//将firstTicket对象添加到ticketList
ticketNumbers.Clear();//清除ticketNumbers列表以重新开始下一张票证
}
CTicket.打印列表(票证列表);
有关更多信息,请参见此处。创建CTicket实例时
firstTicket = new CTicket(i, ticketNumbers);
TicketNumber是对正在传递给CTicket类的SortedSet实例的引用。所有CTicket实例都包含对同一SortedSet实例的引用副本。清除该选项后,所有CTicket将引用相同的空集
解决方案是为每个CTicket创建一个新的ticketNumber集合,然后每个CTicket将包含对不同集合的引用
Random random = new Random();// Random number generator
for (int i = 0; i < 1000; i++)
{
SortedSet<int> ticketNumbers = new SortedSet<int>();
do
{
int randomNumber = random.Next(1, 42);// Create randoms numbers between 1 and 42
ticketNumbers.Add(randomNumber);// Add the random numbers to the ticketNumbers SortedSet
}
while (ticketNumbers.Count< 6);// Stop Adding once the six numbers is reached
CTicket firstTicket;
firstTicket = new CTicket(i, ticketNumbers);// Create ticket object pass i's current value as the ticket id and pass the ticketNumbers sorted set as the ticket numbers
ticketList.Add(firstTicket);// Add the firstTicket object to the ticketList
ticketNumbers.Clear();// clear the ticketNumbers list to start again for the next ticket
}
CTicket.Printlist(ticketList);
Random Random=new Random();//随机数发生器
对于(int i=0;i<1000;i++)
{
SortedSet TicketNumber=新的SortedSet();
做
{
int randomNumber=random.Next(1,42);//创建介于1和42之间的随机数
ticketNumbers.Add(randomNumber);//将随机数添加到ticketNumbers SortedSet
}
while(ticketNumbers.Count<6);//一旦达到六个数字,就停止添加
CTicket第一票;
firstTicket=new-CTicket(i,ticketNumbers);//创建ticket对象,将i的当前值作为票证id传递,并将已排序的票证编号作为票证编号传递
ticketList.Add(firstTicket);//将firstTicket对象添加到ticketList
ticketNumbers.Clear();//清除ticketNumbers列表以重新开始下一张票证
}
CTicket.打印列表(票证列表);
更多信息请参见此处。@sean解释说,您必须重新初始化列表变量,而不是清除
ticketNumbers = new List<int>();
ticketNumbers=newlist();
@sean解释说您必须重新初始化列表变量,而不是清除
ticketNumbers = new List<int>();
ticketNumbers=newlist();
非常感谢您的解释。我来自C++,所以我不习惯使用引用而不使用.&实际上它是通过值传递的,但是TigKeType是对SORTED集的引用,所以您正在通过值传递引用。我对答案进行了编辑,以明确这一点。只是对原始主题的观察,但如果您希望42是一个可以随机创建的数字,则需要在随机中将42更改为43。下一步,因为上限是唯一的。非常感谢您的解释。我来自C++,所以我不习惯使用引用而不使用.&实际上它是通过值传递的,但是TigKeType是对SORTED集的引用,所以您正在通过值传递引用。我对答案进行了编辑,以明确这一点。这只是对原始主题的观察,但如果您希望42是一个可以随机创建的数字,则需要在随机中将42更改为43。下一步,因为上限是排他性的。这与您的问题没有多大关系,但我怀疑您的票证生成器逻辑中仍然存在缺陷。我想这是彩票式的六部分号码。这些票中很可能有一些包含重复的号码。您可能想重新访问您的号码生成器,以确保在每张票证中生成6个唯一的号码……这与您的问题没有多大关系,但我怀疑您的票证生成器逻辑中仍然存在缺陷。我想这是彩票式的六部分号码。这些票中很可能有一些包含重复的号码。您可能需要重新访问您的号码生成器,以确保在每张票证中生成6个唯一的号码。。。