PDA

View Full Version : تولید عدد تصادفی غیر تکراری با استفاده از لیست جنریک استاتیک



HOSSEINONLINE7
پنج شنبه 12 تیر 1393, 13: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, 14:47 عصر
کلاس رو اینطور بنویسید:

public class MyClass
{
public static int MyNumber=0;
}

و موقع استفاده نمیخواد ار کلاس شی جدید بسازید فقط :
MyClass.MyNumber += 10;
//or
myValue = MyClass.MyNumber;

HOSSEINONLINE7
پنج شنبه 12 تیر 1393, 16: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, 16: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, 16: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, 17:36 عصر
دوستان لطفا راهنماییم کنید یک کلاسی میخوام هر دفعه که صدا زده میشه یک عدد تصادفی غیر تکراری تولید کنه خیلی فوری هست .

هر کار میکنم درست کار نمیکنه .!