PDA

View Full Version : حرفه ای: انتخاب چند عدد به صورت تصادفی از بین اعداد تعیین شده



h_jafarnezhad
یک شنبه 22 شهریور 1394, 18:44 عصر
سلام
یه سری عدد دارم مثلا هزار تا می خوام برنامه به صورت تصادفی 20 تا عدد غیر تکراری از بین هزار تا انتخاب کنه و مثلا تو لیبل نشون بده.لطفا راهنمایی کنین که چه طور این کار رو انجام بدم

systam
یک شنبه 22 شهریور 1394, 19:28 عصر
سلام
ببین این کمکت میکنه
ListBox1.Items.Clear();
List<int> numbers = new List<int>();
//ye list az adada ro megdar dehi avvaliye mikonim ba magadirike mikhgayn az beyneshun entekhab konim
for (int i = 1; i <= 1000; i++)
{
numbers.Add(i);
}
List<int> randoms = new List<int>();
for (int i = 0; i <= 20; i++)
{
Random rand = new Random();
//yek add tasadofi az 0 ta tool araye bedast miyarim va az arrayeye numbers moadele adadiye un ro migirim
int randNum = numbers[rand.Next(0, numbers.Count - 1)];
randoms.Add(randNum);
ListBox1.Items.Add(randNum);
//add estefade shode ro az arraye hazf mikonim ta dobare entekhab nashe
numbers.Remove(randNum);
}

h_jafarnezhad
دوشنبه 23 شهریور 1394, 08:19 صبح
سلام فقط یه چیزی اعدادی که دارم خیلی بزرگه مثلا شماره موبایل هست و تعدادشون هم خیلی بالاست با این کد مشکلی پیش نمیاد تو ارایه جا میشه

Salar Ashgi
سه شنبه 24 شهریور 1394, 00:02 صبح
همین الان نوشتم ، یه کد نسبتا کاربردی شد. :)))) :


listBox1.Items.Clear();
List<string> list = new List<string>();
for (int i = 1; i <= 500; i++)
list.Add("0914" + i.ToString()+ "27857" + i.ToString());


string [] shuffled_list = list.OrderBy(a => Guid.NewGuid()).ToArray();
for (int i = 0; i < 20; i++)
listBox1.Items.Add(shuffled_list[i]);




135229

توضیح کد : ابتدای کار میایم 500 تا شماره موبایل تصادفی رو

داخل لیست تولید می کنیم.

به خاطر اینکه هر بار 20 عددی که انتخاب میشن تصادفی باشن ، میایم لیست رو غربال یا تصادفی سازی یا
Shuffle می کنیم توسط دستورات LINQ و کلاس Guid و بعدش دیگه راحته هر بار 20 تای اول لیست رو
انتخاب می کنیم و چون لیست هر بار غربال میشه این 20 عدد هربار یه لیست جدیدی هست.

موفق باشید./

h_jafarnezhad
سه شنبه 24 شهریور 1394, 16:58 عصر
من کد رو این طوری تغییر دادم




listBox2.Items.Clear();
int x;
List<int > numbers = newList<int >();
for (int i = 1; i <= (listBox1.Items.Count); i++)
{
x=Convert.ToInt32(listBox1.Items[i]);
numbers.Add(x);
}
List<int> randoms = newList<int>();
for (int i = 0; i <= Convert.ToInt32(textBox1.Text); i++)
{
Random rand = newRandom();
int randNum = numbers[rand.Next(0, numbers.Count - 1)];
randoms.Add(randNum);
listBox2.Items.Add(randNum);
numbers.Remove(randNum);
}


حالا وقتی میخواد ارایه number رو پر کنه این خطا رو میده
Value was either too large or too small for an Int32.