Reputation: 1
I have a class called message and I am trying to generate multiple objects for this class and store those values in a list but my list is having same elements in the end. Here is my code.
public class Message
{
public int id { get; set; }
public string Data { get; set; }
public List<String> _messageCategories { get; set; }
public List<double> _relevanceScore { get; set; }
public Message(List<String> messageCategories, List<double> relevanceScore)
{
_messageCategories = messageCategories;
_relevanceScore = relevanceScore;
}
}
public List<Message> message=new List<Message>();
public void Randommesg()
{
k1 = 10;
for (int i = 0; i <= k1; i++)
{
List<double> rscore = new List<double>();
List<string> messagetype = new List<string>();
Message msg = new Message(messagetype, rscore);
messagetype.Clear();
rscore.Clear();
Random r = new Random();
int mnum = r.Next(6);
while (messagetype.Count <= mnum)
{
Random r1 = new Random();
string[] arr = { "sports", "reebok", "nike", "adidas", "cookware", "home decor", "tools", "toys", "clothes", "appliances", "electronics", "phones", "computers" };
int i1 = r.Next(13);
String mesgtype = arr[i1];
if (messagetype.Contains(mesgtype))
{
continue;
}
else
{
messagetype.Add(mesgtype);
}
}
while (rscore.Count <= messagetype.Count)
{
Random r1 = new Random();
Double i2 = r1.NextDouble();
String score1 = i2.ToString("0.#");
Double score2 = double.Parse(score1);
rscore.Add(score2);
}
msg._messageCategories = messagetype;
msg._relevanceScore = rscore;
msg.id = i;
message.Add(msg);
}
}
I am expecting 10 different messages in the message list but I ended up have same messages in the message list.Can anyone help me finding where the problem is. Thank you in advance
Upvotes: 0
Views: 308
Reputation: 127
You shouldn't create new instance of Random
every time before calling Next
or NextDouble
methods. Change your Randommesg
to something like this:
public void Randommesg()
{
Random r = new Random();
int k1 = 10;
for (int i = 0; i <= k1; i++)
{
List<double> rscore = new List<double>();
List<string> messagetype = new List<string>();
Message msg = new Message(messagetype, rscore);
messagetype.Clear();
rscore.Clear();
int mnum = r.Next(6);
while (messagetype.Count <= mnum)
{
string[] arr = { "sports", "reebok", "nike", "adidas", "cookware", "home decor", "tools", "toys", "clothes", "appliances", "electronics", "phones", "computers" };
int i1 = r.Next(13);
String mesgtype = arr[i1];
if (messagetype.Contains(mesgtype))
{
continue;
}
else
{
messagetype.Add(mesgtype);
}
}
while (rscore.Count <= messagetype.Count)
{
Double i2 = r.NextDouble();
String score1 = i2.ToString("0.#");
Double score2 = double.Parse(score1);
rscore.Add(score2);
}
msg._messageCategories = messagetype;
msg._relevanceScore = rscore;
msg.id = i;
message.Add(msg);
}
}
Upvotes: 1