PDA

View Full Version : مبتدی: مشکل در تولید اعداد تصادفی



hesam67_b
سه شنبه 05 مرداد 1389, 00:22 صبح
با سلام به همه دوستان و اساتید عزیز.

من میخوام بازی جمع اعداد رو بنویسم ( البته خیلی ساده چون مبتدی هستم) ولی همین اولش توی تولید اعداد تصادفی گیر کردم.

من کد زیر رو توی یه کلاس جدا به نام Numbers نوشتم ولی فقط عدد 0 رو تولید میکنه.

دوستان میتونن راهنمایی کنن مشکل از کجاست؟:متفکر:

البته فقط نیاز به 4 عدد تصادفی دارم و بقیه اعداد ( 5 عدد دیگه رو) از جمع اعداد تصادفی بدست میارم. واسه همین کد رو به این شکل نوشتم




using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Numbers_Game
{
public class Numbers
{

public int[] Number = new int[9];

public Numbers()
{
Random Number1and2 = new Random(DateTime.Now.Millisecond);
for (int i = 1; i <= 2; i++)
Number[i] = Number1and2.Next(1, 100);
Number[3] = Number[1] + Number[2];

Random Number4 = new Random(DateTime.Now.Millisecond);
for (int i = 4; i <= 5; i++)
Number[i] = Number4.Next(1, 100);
Number[6] = Number[4] + Number[5];
Number[7] = Number[1] + Number[4];
Number[8] = Number[2] + Number[5];
Number[9] = Number[3] + Number[6];
}



}



}

vandermond
سه شنبه 05 مرداد 1389, 01:04 صبح
دوست عزيز

Random r = new Random();
double Number4 = r.Next(0,5);
اين كد Number4 رو يك عدد تصادفي بين 0 تا 5 ميزاره.



(شايد اين آخرين پستم توي اين هفته باشه:ناراحت:)

hesam67_b
سه شنبه 05 مرداد 1389, 09:36 صبح
خوب من برای تولید 2 عدد تصادفی از حلقه استفاده کردم.
ولی جواب نمیده و فقط 0 تولید میکنه ( در واقع اصلا کار نمیکنه )

نمی دونم چرا:ناراحت:

va_sha_114
پنج شنبه 07 مرداد 1389, 12:17 عصر
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Numbers_Game
{
public class Numbers
{

public int[] Number = new int[9];

public Numbers()
{
Random Number1and2 = new Random(DateTime.Now.Millisecond);
for (int i = 1; i <= 2; i++)
Number[i] = Number1and2.Next(1, 100);
Number[3] = Number[1] + Number[2];

Random Number4 = new Random(DateTime.Now.Millisecond);
for (int i = 4; i <= 5; i++)
Number[i] = Number4.Next(1, 100);
Number[6] = Number[4] + Number[5];
Number[7] = Number[1] + Number[4];
Number[8] = Number[2] + Number[5];
Number[9] = Number[3] + Number[6];
}



}



}

سلام دوست عزيز مشكل شما را دوستمون جواب داده ايشون به حلقه اشاره نكرده بلكه به نوع استفاده از متد random اشاره كرده اگه دقت مي كرديد براي متد Random مقداري تعيين نكرده ولي شما از constractur استفاده كردي كه مقدار DateTime.Now.Millisecond را بهش دادي
اما در مورد حلقه هم بگم من نميدونم شما چرا كار را سخت كرديد براي 2بار نوشتن متد اومديد يه حلقه تعريف كرديد و يك ارايه تعريف كرديد در حالي كه خيلي راحت با 2 تا متغير اين كار را ميشد كرد اميدوارم مشكلتون حل بشه

mohammad kafiyan
پنج شنبه 07 مرداد 1389, 12:31 عصر
دوست عزیز با استفاده ز تابع random و قراردادن این مقدار تصادفی در یک متغیر و جمع زدن مقدار این متغیر با سال و ماه و روز و ساعت و دقیقه و ثانیه می تونی یک عدد تصادفی بدون تکرار تولید کنی و دیگر هم نیاز به استفاده از حلقه for و array نیست

hesam67_b
پنج شنبه 07 مرداد 1389, 15:35 عصر
سلام دوست عزيز مشكل شما را دوستمون جواب داده ايشون به حلقه اشاره نكرده بلكه به نوع استفاده از متد random اشاره كرده اگه دقت مي كرديد براي متد Random مقداري تعيين نكرده ولي شما از constractur استفاده كردي كه مقدار DateTime.Now.Millisecond را بهش دادي
اما در مورد حلقه هم بگم من نميدونم شما چرا كار را سخت كرديد براي 2بار نوشتن متد اومديد يه حلقه تعريف كرديد و يك ارايه تعريف كرديد در حالي كه خيلي راحت با 2 تا متغير اين كار را ميشد كرد اميدوارم مشكلتون حل بشه

مرسی از راهنمایی.
ظاهرا مشکل از تعریف متغیر زیر بود


public int[] Number = new int[9];


وقتی تعریف بالا رو با تعریف پایین جایگزین کردم و آرایه رو با یک تابع برگشت دادم مشکل حل شد.


int[] Number = new int[9];


ولی هدفم این بود که یک کلاس جدا برای تولید اعداد تصادفی ایجاد کنم و اعداد تولید شده رو با یک متد برگشت بدم که موفق نشدم.
آخرش مجبور شدم توی خود فرم یک متد برای تولید اعداد تعریف کنم.



دوست عزیز با استفاده ز تابع random و قراردادن این مقدار تصادفی در یک متغیر و جمع زدن مقدار این متغیر با سال و ماه و روز و ساعت و دقیقه و ثانیه می تونی یک عدد تصادفی بدون تکرار تولید کنی و دیگر هم نیاز به استفاده از حلقه for و array نیست

نه اصلا نیازی به این کار نبود چون خیلی راحت با همین DateTime.Now.Millisecond اعدا تصادفی رو برحسب زمان جاری تولید میکنه.


شما از constractur استفاده كردي

ببخشید من مبتدی هستم. میشه مفهوم constractur رو برام توضیح بدی؟؟

mohammad kafiyan
پنج شنبه 07 مرداد 1389, 20:00 عصر
ببخشید من مبتدی هستم. میشه مفهوم constractur رو برام توضیح بدی؟؟
دوست عزیز زمانی که یک شی از کلاس مورد نظر ساخته می شود در همان لحظه به صورت اتوماتیک این تابع (constractur) فراخوانی می شود که می تونی عملیات و یکسری دستوراتی درون این تابع قرار بدی در بالا ذکر کردم این عملیات یا دستورات اجرا شوند
گرامر:
public nameclass()
{دستورات}
زمان ساخت شی
nameeclass شی=new nameclasss()