View Full Version : رندوم کردن عدد و جلوگیری از تکرار
amirali001
دوشنبه 02 آذر 1394, 03:17 صبح
سلام
در بیسیک4اندروید میخوام اعداد تصادفی 7 رقمی تولید بشه و اعداد تولید شده تکراری نباشند
ممنون راهنمایی و نمونه کد بدید
amirali001
سه شنبه 03 آذر 1394, 01:51 صبح
کسی نبوذ بعداز 24 ساعت به تاپیک ما جواب بده ؟!!!
NeoFighT
سه شنبه 03 آذر 1394, 07:34 صبح
سلام ،
آخه اینجا اکثرا جاوا کار هستند ، راهش هم فکر میکنم این باشه که یک آرایه از اعداد پشت سر هم داشته باشی ، و هردفعه یکی از این اعداد رو از آرایه برداری و بعد اون عدد رو حذفش کنی.
البته مطمئن نیستم راه استانداردش همین باشه.
Nevercom
سه شنبه 03 آذر 1394, 13:23 عصر
یکی از روش ها این هست احتمال تکرار رو از بین ببرید، مثلاً فرض می کنیم اعداد رندوم رو در بازه ۰ تا ۱۰۰۰۰ نیاز دارید، اول یه آرایه می سازید و با این اعداد پرش می کنید (آرایه ای از تمام گزینه) و بعد اون آرایه رو Shuffle می کنید.
در این صورت آرایه ای خواهید داشت از اعداد غیر تکراری که بصورت نامنظم در آرایه قرار گرفتن. در این حالت اگر آرایه رو به ترتیب پیمایش کنید، همیشه عددی غیر تکراری خواهید داشت که بخاطر نامرتب بودن آرایه با اعداد قبل و بعدش ارتباطی نداره و رندوم به حساب میاد.
راه حل دیگه این هست که آرایه ای بسازید که اعداد رندوم بدست اومده رو داخلش قرار میدید، هربار که عددی رندوم تولید شد، اول چک می کنید تو اون آرایه هست یا نه و اگر نبود غیرتکراری هست. البته این روش اصلاً معقول نیست و پردازش زیادی میگیره
amirali001
سه شنبه 03 آذر 1394, 22:50 عصر
ٌٍٍٍٍٍٍٍٍٍٍٍ
Nevercom
چهارشنبه 04 آذر 1394, 00:04 صبح
این روش هیچ تضمینی برای تکراری نبودن نمیده، صرفاً دارید ۷ تا عدد یک رقمی رو به هم میچسبونید و یک رشته حاوی ۷ رقم تولید می کنید.
برای اطمینان از تکراری نبودن باید از روشی مشابه روشی که عرض کردم استفاده کنید
حتی اگر زمان جاری رو بر حسب میلی ثانیه بگیرید، 5 رقم آخرش رو با یک عدد ۲ رقمی رندم به هم بچسبونید، احتمال تکراری بودنش کمتر از روش خودتون هست.
rahnema1
چهارشنبه 04 آذر 1394, 22:03 عصر
سلام
واسه این کار همون طور که دوستان اشاره کردند می شه از shuffle استفاده کرد اما این واسه وقتی هست که دامنه اعداد مورد نظر کم باشه مثلا توی این مورد شما که قراره اعداد 7 رقمی تولید بشه نیازه که یک آرایه با حجم حدود 34 مگ در حافظه ایجاد بشه مخصوصا در موبایل که مساله حافظه خیلی مهمه
یک روش بهتر پیشنهاد می کنم به نام Format Preserving Encryption
که مصرف حافظه هم نداره
که واسه این روش هم با جاوا و هم با سی شارپ کد اون را دیدم که لینکش را قرار می دم میتونید از روی اونها نمونه بیسیک هم بنویسید
https://github.com/robshep/JavaFPE
https://dotfpe.codeplex.com
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.