View Full Version : تولید عدد تصادفی غیر تکراری با استفاده از لیست جنریک استاتیک
HOSSEINONLINE7
پنج شنبه 12 تیر 1393, 14:15 عصر
سلام من یک کلاسی نوشتم که باید با هر بار فراخوانی یک عدد تصادفی غیر تکراری تولید کنه و در یک لیست جنریک ذخیره کنه تا اعدادی که تولید شدن چک بشن که تکراری نباشن .
من کد زیر را نوشتم ولی لیستم بعد از فراخوانی مجدد پاک میشه .
کدم درست کار نمیکنه لطفا راهنمایی کنید اصلاحش کنم و لیستم را بصورت استاتیک تعریف کنم .
public static int RandomNum()
{
List<int> temp = new List<int>();
Random rnd = new Random();
int r = rnd.Next(3, 8);
while (temp.Contains(r))
{
r = rnd.Next(3, 8);
}
temp.Add(r);
return r;
}
parvizwpf
پنج شنبه 12 تیر 1393, 15:47 عصر
کلاس رو اینطور بنویسید:
public class MyClass
{
public static int MyNumber=0;
}
و موقع استفاده نمیخواد ار کلاس شی جدید بسازید فقط :
MyClass.MyNumber += 10;
//or
myValue = MyClass.MyNumber;
HOSSEINONLINE7
پنج شنبه 12 تیر 1393, 17:12 عصر
کلاس رو اینطور بنویسید:
public class MyClass
{
public static int MyNumber=0;
}
و موقع استفاده نمیخواد ار کلاس شی جدید بسازید فقط :
MyClass.MyNumber += 10;
//or
myValue = MyClass.MyNumber;
مرسی .
من یک لیست جنریک هم دارم که وقتی اعداد تصادفی ایجاد میکنم برای اینکه چک کنم تکراری نباشه توی لیست میریزم .
حالا وقتی کلاسم را فراخوانی میکنم تا عدد تصادفی جدید تولید کنم لیست من خالی میشه و حالا ممکنه عددی تولید بشه که تکراری باشه .
چکار کنم لیستم خالی نشه ؟
public static int RandomNum()
{
Random rnd = new Random();
List<int> temp = new List<int>();
int r = rnd.Next(3, 8);
while (temp.Contains(r))
{
r = rnd.Next(3, 8);
}
return r;
}
sohil_ww
پنج شنبه 12 تیر 1393, 17:42 عصر
برای این که فیلدت یک بار مقدار دهی بشه می تونی اون رو به صورت static تعریف کنی یعنی
static List<int> temp = new List<int>(); public static int RandomNum()
{
Random rnd = new Random();
int r = rnd.Next(3, 8);
while (temp.Contains(r))
{
r = rnd.Next(3, 8);
}
return r;
}
}
ولی چیزی که برای من سئوال اینه که شرط حلقه شما همیشه true هست و احتمال تولید اعداد تصادفی تکراری هم خیلی زیاده !!
HOSSEINONLINE7
پنج شنبه 12 تیر 1393, 17:54 عصر
برای این که فیلدت یک بار مقدار دهی بشه می تونی اون رو به صورت static تعریف کنی یعنی
static List<int> temp = new List<int>(); public static int RandomNum()
{
Random rnd = new Random();
int r = rnd.Next(3, 8);
while (temp.Contains(r))
{
r = rnd.Next(3, 8);
}
return r;
}
}
ولی چیزی که برای من سئوال اینه که شرط حلقه شما همیشه true هست و احتمال تولید اعداد تصادفی تکراری هم خیلی زیاده !!
وقتی لیست را اینطوری تعریف میکنم : static List<int> temp = new List<int>();
ارور میده ...!
خوب وقتی که یک عددی تولید بشه که شامل لیست نباشه شرط false میشه دیگه .
یکی 2 ساعته درگیر همین عدد تصادفیم هر جور مینویسم یا خطا میده یا درست کار نمیکنه .
داغ کردم :اشتباه:
HOSSEINONLINE7
پنج شنبه 12 تیر 1393, 18:36 عصر
دوستان لطفا راهنماییم کنید یک کلاسی میخوام هر دفعه که صدا زده میشه یک عدد تصادفی غیر تکراری تولید کنه خیلی فوری هست .
هر کار میکنم درست کار نمیکنه .!
vBulletin® v4.2.5, Copyright ©2000-1403, Jelsoft Enterprises Ltd.