PDA

View Full Version : سوال: مشکل با رندوم های مثل هم!!



endline88
جمعه 18 تیر 1389, 12:27 عصر
سلام خسته نباشید
کسی می دونه چطوری می شه رندوم هایی گرفت که مثل هم نباشه؟
منظور من الگوریتم نیست!! مثلاً وقتی من قطعه کد زیر رو اجرا می کنم تمام رندوم هاش یکیه. در واقع یه بار رندوم می گیره و همیشه همون مقدار رو بر می گردونه!
for(int i = 0; i < 20; i++){rand.next();}
واسه همین وقتی تو حلقه رندوم می گیرم و چک می کنم که اگه این رندوم مثل رندوم های قبلی بود دوباره رندوم بگیره می ره تو حلقه ی بی نهایت!
مثلاً تو c++ تابع Randomize رو داریم که از وقوع رندوم های مثل هم جلوگیری می کنه. تو C# چی کار باید کرد؟

Salar Ashgi
جمعه 18 تیر 1389, 12:56 عصر
بهتره بشکل زیر استفاده کنید :



private void button1_Click(object sender, EventArgs e)
{
listBox1.Items.Clear();
Random rnd = new Random();
for (int i = 1; i <= 6; i++)
{
listBox1.Items.Add(rnd.Next(1, 20).ToString());
}

}

endline88
جمعه 18 تیر 1389, 13:39 عصر
ممنونم از پاسخی که دادی.
این برنامه رو تست کردم و رندوم های متفاوت میده. اما نمی دونم چرا قطعه کدی که خودم نوشتم همیشه رندوم های یکسان می گیره! اون قطعه کد رو می زارم اگه لطف کنی نظرتو بگی ممنون می شم.


do
{
randNum = rand.Next(24);
for (int i = 0; i < TakeOffAirplane.getCount(); i++)
{
if (time.Hour == TakeOffAirplane.Peek_take(i).getTime().Hour)
{ check = false; break; }
else
check = true;
}
if (check)
{
for (int i = 0; i < landAirplane.getCount(); i++)
{
if (time.Hour == landAirplane.Peek_land(i).getTime().Hour)
{ check = false; break; }
else
check = true;
}
}
} while (!check);

که تو کد بالا می خوام زمان های تصادفی مثل هم نباشن!! اما تو بی نهایت گیر می کنه و از حلقه خارج نمیشه!!
یا مثلاً :


private string setName()
{
Random rand = new Random();
string st = "";
if (rand.Next(45) < 20)
{ st = "topolof 123"; rand.NextDouble(); }
else if (rand.Next(80) < 30)
{ st = "bueing 707"; rand.NextDouble(); }
else if (rand.Next(100) < 20)
{ st = "topolof 300a"; rand.NextDouble(); }
else if (rand.Next(135) < 70)
{ st = "boeing 330"; rand.NextDouble(); }
else
st = "topolof 200i";
return st;
}
این یه تابع ساده برای انتخاب اسم های تصادفیه!
اما همه ی اسم هارو مثل هم انتخاب می کنه!!
اگه کمکم کنی خیلی ممنون می شم
کل پروژه ام فقط لنگ همین موضوعه! خیلی هم سرچ کردم نتیجه نداد!

hossein_ignore
جمعه 18 تیر 1389, 20:06 عصر
این یه DLL برای ایجاد عددهای رندوم با فاصله ی مشخص
مثال:


IgNoReCLS.RandomNumber r = new IgNoReCLS.RandomNumber();
label1.Text = r.NextRandom(0, 10, 2).ToString();


مثلا اگه minimumLength(فاصله)رو 2 بدی، اگه عدد 5 تولید شد، دیگه 3و4و5و6و7 تولید نمیشه! تا زمانی که امکان داشته باشه عدد تکراری نمیده، وقتی همه ی اعداد ممکن تو اون بازه رو ایجاد کرد، دوباره میاد یه سری اعداد رندوم دیگه تو اون بازه ایجاد می کنه

endline88
جمعه 18 تیر 1389, 22:49 عصر
ممنون از راهنمایی و dll
خیلی لطف کردی