PDA

View Full Version : سوال: اشكال اين آرايه كجاست كه اعداد رندوم نمي دهد؟



complexcoding
سه شنبه 03 اردیبهشت 1392, 10:42 صبح
سلام
اشكال اين آرايه كجاست كه اعداد رندوم نمي دهد؟
List<int> numbersy = new List<int>();

numbersy.Add(32);
numbersy.Add(117);
numbersy.Add(202);
numbersy.Add(287);

try
{
Random randy = new Random();
int randNumy = numbersy[randy.Next(0, numbersy.Count - 1)];
}
catch { }
فقط به يك صورت عدد مي دهد و رندوم نيست و ثابت مي باشد؟
ممنون

complexcoding
سه شنبه 03 اردیبهشت 1392, 11:15 صبح
دوستان ليستي از آرايه هاي غير تكراري چطوري بگيره الان رندوم مي گيره؟

fakhravari
سه شنبه 03 اردیبهشت 1392, 11:30 صبح
protected void Page_Load(object sender, EventArgs e)
{
List<int> numbersy = new List<int>();

numbersy.Add(32);
numbersy.Add(117);
numbersy.Add(202);
numbersy.Add(287);
string sss = Number(numbersy);
}

public static string Number(List<int> Num)
{
string rand_num = "";

Random rand = new Random();
for (int i = 0; i < 1; i++)
{
rand_num += Num[rand.Next(0, Num.Count)];
}
return rand_num;
}

complexcoding
سه شنبه 03 اردیبهشت 1392, 11:45 صبح
من جاي number گذاشتم Numbery چون قسمت x و y دارم براي تنظيم location مي خوام حالا كدوم قسمت رو به عنوان خروجي به locationبدم؟؟
مثلا اينطوري درسته :
Lbl1n1.Location = new Point(......, Numbery[0]);

Mahmoud.Afrad
سه شنبه 03 اردیبهشت 1392, 12:51 عصر
متد زیر اعداد تصادفی تولید میکنه(نوشته شده از روی این الگوریتم (http://barnamenevis.org/showthread.php?394618-%D8%A7%D8%B9%D8%AF%D8%A7%D8%AF-%D8%AA%D8%B5%D8%A7%D8%AF%D9%81%DB%8C-%D8%BA%DB%8C%D8%B1-%D8%AA%DA%A9%D8%B1%D8%A7%D8%B1%DB%8C&p=1750602#post1750602))

private List<int> GetRandomNumbers(int minValue, int maxValue, int countOfRandomNumbers)
{
List<int> numbers = Enumerable.Range(minValue, maxValue - minValue + 1).ToList();
int index1, index2, temp;
int maxIndex = maxValue - minValue - 1;
Random myRandom = new Random();
for (int i = 0; i < numbers.Count; i++)
{
index1 = myRandom.Next(0, maxIndex);
index2 = myRandom.Next(0, maxIndex);
if (index1 != index2)
{
temp = numbers[index1];
numbers[index1] = numbers[index2];
numbers[index2] = temp;
}
}
return numbers.Take(countOfRandomNumbers).ToList();
}

متد زیر با استفاده از متد بالا ، لیستی تصادفی از Point تولید میکنه:

private List<Point> GetRandomPoints(int countOfRandomPoints)
{
List<int> xs = GetRandomNumbers(0, this.Width, countOfRandomPoints);
List<int> ys = GetRandomNumbers(0, this.Height, countOfRandomPoints);
List<Point> randomPoints = new List<Point>();
for (int i = 0; i < countOfRandomPoints; i++)
{
Point p = new Point(xs[i], ys[i]);
randomPoints.Add(p);
}
return randomPoints;
}

به اینصورت استفاده کنید:

List<Point> points = GetRandomPoints(2);
label1.Location = points[0];
label2.Location = points[1];

complexcoding
سه شنبه 03 اردیبهشت 1392, 14:54 عصر
ممنون اما اين كدي كه گذاشتيد مقدار از قبل نداره؟ ولي من مقدار مشخصي به آرايه دادم و رندوم از بين همون مقدارها رو مي خوام به صورتي كه تكراري نباشه مي خوام؟
ممنون

complexcoding
سه شنبه 03 اردیبهشت 1392, 17:18 عصر
دوستان لطفا كمك كنيد ؟ من قبلا اين كد پست اول رو با كمي تغييرات مورد استفاده قرار داده بودم ولي الان هركاري مي كنم؟ نمي تونم دوباره به مصرف برسونم!!!!

amirzandi
سه شنبه 03 اردیبهشت 1392, 18:22 عصر
من که اینجور کد زدم کار کرد:

private void button1_Click(object sender, EventArgs e)
{
List<int> nmList = new List<int>();
nmList.Add(32);
nmList.Add(117);
nmList.Add(202);
nmList.Add(287);

Random rnd = new Random();
int n = rnd.Next(0, nmList.Count());
this.listBox1.Items.Add(nmList[n].ToString());
}

amirzandi
سه شنبه 03 اردیبهشت 1392, 18:28 عصر
سلام
اشكال اين آرايه كجاست كه اعداد رندوم نمي دهد؟
List<int> numbersy = new List<int>();

numbersy.Add(32);
numbersy.Add(117);
numbersy.Add(202);
numbersy.Add(287);

try
{
Random randy = new Random();
int randNumy = numbersy[randy.Next(0, numbersy.Count - 1)];
}
catch { }
فقط به يك صورت عدد مي دهد و رندوم نيست و ثابت مي باشد؟
ممنون

کانت رو منهای یک نکن دیگه

complexcoding
سه شنبه 03 اردیبهشت 1392, 19:50 عصر
من که اینجور کد زدم کار کرد:

private void button1_Click(object sender, EventArgs e)
{
List<int> nmList = new List<int>();
nmList.Add(32);
nmList.Add(117);
nmList.Add(202);
nmList.Add(287);

Random rnd = new Random();
int n = rnd.Next(0, nmList.Count());
this.listBox1.Items.Add(nmList[n].ToString());
}

برادرا خواهش!! مي گم غير تكراري نمي گم كد ايراد داره. اين غير تكراري بودن يك نكته داشت من يادم رفته هرچي سرچم مي كنم نمي تونم پيدا كنم كد اصليشو الان من از كدي كه گفتيد در ليست باكس هم استفاده كردم ولي حاصل اين شد.
103242

fakhravari
سه شنبه 03 اردیبهشت 1392, 22:27 عصر
شما میخواهید اعداد یک ارایه به صورت رندوم انتخاب بشه؟
و قبلی با بعدیش یکسان نباشه؟

amirzandi
چهارشنبه 04 اردیبهشت 1392, 07:15 صبح
برادرا خواهش!! مي گم غير تكراري نمي گم كد ايراد داره. اين غير تكراري بودن يك نكته داشت من يادم رفته هرچي سرچم مي كنم نمي تونم پيدا كنم كد اصليشو الان من از كدي كه گفتيد در ليست باكس هم استفاده كردم ولي حاصل اين شد.
103242

والا من این کد رو زدم هر دفعه یک رندوم از اون Array که تعریف کردی می داد بهم.

Mahmoud.Afrad
چهارشنبه 04 اردیبهشت 1392, 07:27 صبح
به کدهایی که گذاشته میشه توجه کنید حتی اگر اونی نباشه که شما میخواهید چون ممکنه با یه تغییر به خواسته تون برسید. همون کد بنده رو به اینصورت تغییر بده:

private void button1_Click(object sender, EventArgs e)
{
List<int> nmList = new List<int>();
nmList.Add(32);
nmList.Add(117);
nmList.Add(202);
nmList.Add(287);

listBox1.DataSource = GetRandomNumbers(nmList, 3);
}

private List<int> GetRandomNumbers(List<int> numbers, int countOfRandomNumbers)
{
int index1, index2, temp;
int maxIndex = numbers.Count;
Random myRandom = new Random();
for (int i = 0; i < numbers.Count; i++)
{
index1 = myRandom.Next(0, maxIndex);
index2 = myRandom.Next(0, maxIndex);
if (index1 != index2)
{
temp = numbers[index1];
numbers[index1] = numbers[index2];
numbers[index2] = temp;
}
}
return numbers.Take(countOfRandomNumbers).ToList();
}

complexcoding
چهارشنبه 04 اردیبهشت 1392, 10:53 صبح
به کدهایی که گذاشته میشه توجه کنید حتی اگر اونی نباشه که شما میخواهید چون ممکنه با یه تغییر به خواسته تون برسید. همون کد بنده رو به اینصورت تغییر بده:

private void button1_Click(object sender, EventArgs e)
{
List<int> nmList = new List<int>();
nmList.Add(32);
nmList.Add(117);
nmList.Add(202);
nmList.Add(287);

listBox1.DataSource = GetRandomNumbers(nmList, 3);
}

private List<int> GetRandomNumbers(List<int> numbers, int countOfRandomNumbers)
{
int index1, index2, temp;
int maxIndex = numbers.Count - 1;
Random myRandom = new Random();
for (int i = 0; i < numbers.Count; i++)
{
index1 = myRandom.Next(0, maxIndex);
index2 = myRandom.Next(0, maxIndex);
if (index1 != index2)
{
temp = numbers[index1];
numbers[index1] = numbers[index2];
numbers[index2] = temp;
}
}
return numbers.Take(countOfRandomNumbers).ToList();
}

اين قسمت از كدهاي پايين رو بايد دركلاس درج كنم؟

private List<int> GetRandomNumbers(List<int> numbers, int countOfRandomNumbers)
{
int index1, index2, temp;
int maxIndex = numbers.Count - 1;
Random myRandom = new Random();
for (int i = 0; i < numbers.Count; i++)
{
index1 = myRandom.Next(0, maxIndex);
index2 = myRandom.Next(0, maxIndex);
if (index1 != index2)
{
temp = numbers[index1];
numbers[index1] = numbers[index2];
numbers[index2] = temp;
}
}
return numbers.Take(countOfRandomNumbers).ToList();
}

ممنون

danialafshari
چهارشنبه 04 اردیبهشت 1392, 11:26 صبح
تابع هست و در یک فضای خالی یا قسمت کلاس فرم قرارش بدید

complexcoding
چهارشنبه 04 اردیبهشت 1392, 15:16 عصر
دوستان من دو تا آرايه عدد صحيح درست كردم حالا مي خوام خانه هاي اين آرايه رو با مقادير به دست اومده از همين countOfRandomNumbers كه در بالا هست مقداردهي كنم اما با اين ارور مواجه شدم؟ برطرف كردن اين متد چطوري هست؟
Unable to cast object of type 'System.Collections.Generic.List`1[System.Int32]' to type 'System.IConvertible'.

اين هم كدهاي من هست.
List<int> nmListX = new List<int>();
nmListX.Add(12);
nmListX.Add(97);
nmListX.Add(182);
nmListX.Add(267);
int[] pointX = new int[4];
for (int i = 0; i < 3; i++)
{
pointX[i] = Convert.ToInt32(GetRandomNumbers(nmListX, 4));
}
//~~~~~~~~~~~~~~~~Y~~~~~~~~~~~~~~~~~~~~
List<int> nmListy = new List<int>();
nmListy.Add(32);
nmListy.Add(117);
nmListy.Add(202);
nmListy.Add(287);
int[] pointY = new int[4];
for (int i = 0; i < 3; i++)
{
pointY[i] = Convert.ToInt32(GetRandomNumbers(nmListy, 4));
}

Mahmoud.Afrad
چهارشنبه 04 اردیبهشت 1392, 16:03 عصر
GetRandomNumbers یه لیست از اعداد بر میگردونه که میتونید حاصل رو در یک لیست قرار بدید. در ضمن countOfRandomNumbers تعداد ارقام دریافتی رو مشخص میکنه.

List<int> nmListX = new List<int>();
nmListX.Add(12);
nmListX.Add(97);
nmListX.Add(182);
nmListX.Add(267);
List<int> pointX = GetRandomNumbers(nmListX, 4);
//~~~~~~~~~~~~~~~~Y~~~~~~~~~~~~~~~~~~~~
List<int> nmListy = new List<int>();
nmListy.Add(32);
nmListy.Add(117);
nmListy.Add(202);
nmListy.Add(287);
List<int> pointY = GetRandomNumbers(nmListy, 4);
با اندیس میتونید به اعضای pointY و pointX دسترسی داشته باشید.

complexcoding
دوشنبه 09 اردیبهشت 1392, 06:57 صبح
GetRandomNumbers یه لیست از اعداد بر میگردونه که میتونید حاصل رو در یک لیست قرار بدید. در ضمن countOfRandomNumbers تعداد ارقام دریافتی رو مشخص میکنه.

List<int> nmListX = new List<int>();
nmListX.Add(12);
nmListX.Add(97);
nmListX.Add(182);
nmListX.Add(267);
List<int> pointX = GetRandomNumbers(nmListX, 4);
//~~~~~~~~~~~~~~~~Y~~~~~~~~~~~~~~~~~~~~
List<int> nmListy = new List<int>();
nmListy.Add(32);
nmListy.Add(117);
nmListy.Add(202);
nmListy.Add(287);
List<int> pointY = GetRandomNumbers(nmListy, 4);
با اندیس میتونید به اعضای pointY و pointX دسترسی داشته باشید.
از اين آرايه استفاده كردم و تا الان روش كار مي كردم ولي رندوم نمي ده و از كد رندوم قبلي كه استفاده مي كردم كه به علت تكراري بودن گذاشتمش كنار هم تكراري تر مي ده... :ناراحت: يه خورده خسته شدم...
دوستان نمي دونم چه كنم ؟ رندوم واقعي مي خوام ايجاد كنم...
ممنون

complexcoding
دوشنبه 09 اردیبهشت 1392, 17:29 عصر
من اين كار رو انجام دادم اما متاسفانه بعضي از ليبل ها روي هم افتاد.
اون منهای یک (-1) رو هم از maxIndex بردارید.
تو كدام منهاي يك نيست؟؟؟ اينجا كدايي كه هست قديميه. تو ويژوال اصلاح كردم.
دوستان ياري...

complexcoding
دوشنبه 09 اردیبهشت 1392, 18:41 عصر
اين متد مورد استفاده هست :
private List<int> GetRandomNumbers(List<int> numbers, int countOfRandomNumbers)
{
int index1, index2, temp1;
int maxIndex = numbers.Count;
Random myRandom = new Random();
for (int i = 0; i < numbers.Count; i++)
{
//به صورت رندوم متغيرها از خانه هاي آرايه پر مي شوند
index1 = myRandom.Next(0, maxIndex);
index2 = myRandom.Next(0, maxIndex);
temp1 = numbers[index1];
numbers[index1] = numbers[index2];
numbers[index2] = temp1;
}
return numbers.Take(countOfRandomNumbers).ToList();
اين هم كدهاي مورد استفاده در فرم لود:
//~~~~~~~~~~~~~~~~X~~~~~~~~~~~~~~~~~~~~
List<int> nmListX = new List<int>();
nmListX.Add(12);
nmListX.Add(97);
nmListX.Add(182);
nmListX.Add(267);
List<int> pointX = GetRandomNumbers(nmListX, 4);
//~~~~~~~~~~~~~~~~Y~~~~~~~~~~~~~~~~~~~~
List<int> nmListy = new List<int>();
nmListy.Add(32);
nmListy.Add(117);
nmListy.Add(202);
nmListy.Add(287);
List<int> pointY = GetRandomNumbers(nmListy, 4);
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Lbl1n1.Location = new Point(nmListX[0], pointY[0]);
Lbl2n2.Location = new Point(nmListX[0], pointY[1]);
Lbl5n5.Location = new Point(nmListX[0], pointY[2]);
Lbl6n5.Location = new Point(nmListX[0], pointY[3]);
Lbl4n2.Location = new Point(nmListX[2], pointY[0]);
Lbl3n1.Location = new Point(nmListX[2], pointY[1]);
Lbl7n7.Location = new Point(nmListX[2], pointY[2]);
Lbl8n7.Location = new Point(nmListX[2], pointY[3]);
Lbl13n13.Location = new Point(nmListX[3], pointY[0]);
Lbl14n13.Location = new Point(nmListX[3], pointY[1]);
Lbl9n9.Location = new Point(nmListX[3], pointY[2]);
Lbl10n9.Location = new Point(nmListX[3], pointY[3]);
Lbl15n15.Location = new Point(nmListX[1], pointY[0]);
Lbl16n15.Location = new Point(nmListX[1], pointY[1]);
Lbl11n11.Location = new Point(nmListX[1], pointY[2]);
Lbl12n11.Location = new Point(nmListX[1], pointY[3]);
ممنون

Mahmoud.Afrad
دوشنبه 09 اردیبهشت 1392, 20:24 عصر
امکان نداره روی هم بیفتند چون طبق کد خودت هیچ لوکیشنی دارای (x,y) تکراری نیست.
البته میشه یک کاره دیگه هم کرد.
به جای تولید عدد تصادفی ، کنترلها(همون لیبل ها) رو داخل لیست بریزی و اونو با یک الگوریتم به هم بزنی(ترتیبو تغییر بدی) بعد هم به ترتیب نقاط رو نسبت بدی.

private void button1_Click(object sender, EventArgs e)
{
List<int> pointX = new List<int>() { 12, 97, 182, 267 };
List<int> pointY = new List<int>() { 32, 117, 202, 287 };
List<Control> lslControl = new List<Control>() { Lbl1n1, Lbl2n2, Lbl5n5, Lbl6n5, Lbl4n2, Lbl3n1, Lbl7n7, Lbl8n7, Lbl13n13, Lbl14n13, Lbl9n9, Lbl10n9, Lbl15n15, Lbl16n15, Lbl11n11, Lbl12n11 };
HashingArrangement(ref lslControl);
int k = 0;
for (int i = 0; i < pointX.Count; i++)
{
for (int j = 0; j < pointY.Count; j++)
{
lslControl[k].Location = new Point(pointX[i], pointY[j]);
k++;
}
}
}

private void HashingArrangement(ref List<Control> controls)
{
int index1, index2;
Control temp;
Random myRandom = new Random();
for (int i = 0; i < controls.Count; i++)
{
index1 = myRandom.Next(0, controls.Count);
index2 = myRandom.Next(0, controls.Count);
temp = controls[index1];
controls[index1] = controls[index2];
controls[index2] = temp;
}
}

complexcoding
دوشنبه 09 اردیبهشت 1392, 22:15 عصر
بسيار ممنون مشكل تا حدود بسيار زيادي حل شد.
شما اين كد رو خودتون نوشتيد يا از اينترنت سرچ كرديد اگر سرچ كرديد آدرس سايتش رو بديد تا ما هم استفاده ببريم ممنون.

Mahmoud.Afrad
سه شنبه 10 اردیبهشت 1392, 14:49 عصر
نوشتنش کاری نداره.(خودم نوشتم)
اگر همون پست اول سوال رو درست می پرسیدید همون اول جواب میگرفتید. (مثلا میگفتید میخواهید ترتیب قرار گیری کنترل ها رندوم باشه).