بروز خطا
[message]
اشتراک در سوال
رای ها
[dataList]
استفاده از Random و تولید لیستی از اعداد
سلام..
چطور میشه با استفاده از Random لیستی از عداد تهیه کنم که تکراری نباشن؟
برای درک بهتر:
من لیستی از اعداد 1 تا 100 را در یک آرایه 100 عنصری وارد کردم. حالا میخوام ترتیب محتوای هر عنصر تصادفی باشه. برای مثال در index#1 عدد 86 قرار بگیره و 86 در index# دیگری تکرار نشود.
0
0
فکر کنم بهینه ترین راه درست کردن یه آرایه از اعداد 1-100 باشه و بعد تولید یه عدد تصادفی بین 0 تا طول آرایه اول(که در اجرای اول 100 میشه در اجرای دوم 99 و ...) که این عدد رو به عنوان اندیس استفاده میکنیم و مقدارش رو از آرایه اول میخونیم، اون رو از آرایه اول حذف میکنیم، وبه آرایه دوم اضافه اش میکنیم. در نهایت آرایه دوم همون لیست رندم میشه. با استفاده از این الگوریتم برای اعداد 1-100، فقط 100 بار حلقه تکرار میشه و نه بیشتر که بهینه ترین حالت هست (12 سال پیش)
برای این سوال 1 پاسخ وجود دارد.
پاسخ به سوال
h_r_v
12 سال پیش
+1
0
Random rng = new Random();
List<Integer> generated = new ArrayList<Integer>();
for (int i = 0; i < numbersNeeded; i++)
{
while(true)
{
Integer next = rng.nextInt(max) + 1;
if (!generated.contains(next))
{
generated.add(next);
break;
}
}
}
ببینید جواب میده؟
سلام
وقتی از حلقه while استفاده کردید در ایتریت اول مشکلی نیست ولی هر چقدر جلو میریم احتمال اینکه عدد تکراری را رندوم پیدا کنه بیشتر میشه وقتی به حالت یکی مونده به آخر برسیم خیلی احتمال کم میشه و همینطور حلقه میچرخه و از نظر طراحی الگوریتم این راه حل خوب نیست.
پیشنهاد دوستمون برای انتخاب از یک لیست به صورت رندم بهینه است (12 سال پیش)
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .