PDA

View Full Version : سوال: عدد تصادفی در سی شارپ



hadikhani
جمعه 12 دی 1393, 03:19 صبح
سلام
من یک برنامه آزمون گیر نوشتم که در هر آزمون تعداد سوالات رو کاربر انتخاب می کنه بعد برنامه باید بصورت تصادفی از یک جدول در بانک اطلاعاتی sql server یک سوال به کاربر نمایش بده.
الان من مشکلی که دارم اینکه وقتی از random() استفاده می کنم مقدار تکراری به من میده
127140

Share & Learn
جمعه 12 دی 1393, 04:24 صبح
سلام
می تونید از این توابع استفاده کنید:

این تابع به تعداد size عدد تصادفی تولید می کنه که این اعداد بین min و max قرار دارند


public int[] UniqeRandomArray(int size, int Min, int Max)
{
int[] UniqueArray = new int[size];
Random rnd = new Random();
int Random;

for (int i = 0; i < size; i++)
{
Random = rnd.Next(Min, Max);

for (int j = i; j >= 0; j--)
{
if (UniqueArray[j] == Random)
{
Random = rnd.Next(Min, Max); j = i;
}
}
UniqueArray[i] = Random;
}
return UniqueArray;
}



و این تابع اعداد از min تا max رو به صورت نامرتب بر می گردونه


public List<int> UniqueRandomGenerator(int min, int max)
{
Random rand = new Random();
SortedList<int, int> uniqueList = new SortedList<int, int>();
for (int i = min; i <= max; i++)
uniqueList.Add(rand.Next(),i);

return uniqueList.Values.ToList();
}

elec60
جمعه 12 دی 1393, 11:47 صبح
شما باید هر دفعه یک شی جدید از کلاس Random بسازین و سپس از متد Next شی جدید استفاده کنید تا عدد تکراری تولید نشه.

کلاس رندم موقع ساخته شدن از time سیستم به عنوان seed استفاده میکنه...

hadikhani
یک شنبه 14 دی 1393, 21:28 عصر
شما باید هر دفعه یک شی جدید از کلاس Random بسازین و سپس از متد Next شی جدید استفاده کنید تا عدد تکراری تولید نشه.

کلاس رندم موقع ساخته شدن از time سیستم به عنوان seed استفاده میکنه...

لطفا بیشتر توضیح بدید
من از این کد در داخل یک تایمر استفاد کردم

random r = new random();
int a =r.next(1,10);

اما هربار عدد تکراری تولید میشه

RIG000
یک شنبه 14 دی 1393, 22:55 عصر
خب شما تعداد محدودی داری و رندم یعنی احتمالش هست که سوال تکراری باشه یا نباشه.!
یا باید سوالات رو پشت سر هم بخوندید . یا باید محدوده براش مشخص کنید.

samadblaj
دوشنبه 15 دی 1393, 00:25 صبح
سلام دوست عزیز از این روش برای تولید اعداد تصادفی بدون تکرار استفاده کن

private void button2_Click(object sender, EventArgs e)
{
foreach (int i in UniqueRandom(0, 20))
{
MessageBox.Show(i.ToString());
}

}
IEnumerable<int> UniqueRandom(int minInclusive, int maxInclusive)
{
List<int> candidates = new List<int>();
for (int i = minInclusive; i <= maxInclusive; i++)
{
candidates.Add(i);
}
Random rnd = new Random();
while (candidates.Count > 0)
{
int index = rnd.Next(candidates.Count);
yield return candidates[index];
candidates.RemoveAt(index);
}
}

hadikhani
پنج شنبه 18 دی 1393, 17:57 عصر
سلام دوست عزیز از این روش برای تولید اعداد تصادفی بدون تکرار استفاده کن

private void button2_Click(object sender, EventArgs e)
{
foreach (int i in UniqueRandom(0, 20))
{
MessageBox.Show(i.ToString());
}

}
IEnumerable<int> UniqueRandom(int minInclusive, int maxInclusive)
{
List<int> candidates = new List<int>();
for (int i = minInclusive; i <= maxInclusive; i++)
{
candidates.Add(i);
}
Random rnd = new Random();
while (candidates.Count > 0)
{
int index = rnd.Next(candidates.Count);
yield return candidates[index];
candidates.RemoveAt(index);
}
}
سلام من می خوام با تابع دستور یک آرایه رو پر کنم.
لطفا راهنماییم کنید.

elec60
پنج شنبه 18 دی 1393, 18:18 عصر
لطفا بیشتر توضیح بدید
من از این کد در داخل یک تایمر استفاد کردم

random r = new random();
int a =r.next(1,10);

اما هربار عدد تکراری تولید میشه

شما فقط یک بار بیرون تابع از کلاس Random نمونه سازی بکنین و بعد از نمونه ساخته شده استفاده کنین. داخل حلقه هر دفعه نمونه نسازین!