PDA

View Full Version : ایجاد آرایه دوبعدی تصادفی غیرتکراری با اعدادی در بازه خاص



Somebodysme
پنج شنبه 14 آبان 1394, 21:29 عصر
دوستان همونطور که از اسم تاپیک پیداست من میخواستم که واسه بازی پازل8 یک ارایه دوبعدی طراحی کنم که سه در سه هستش که تا اینجاش مشکلی نیست ولی میخواستم مقدار درایه ها به صورت تصادفی تولید کنم و بین 0 تا 8 باشه و اینکه تکرار هم در اون اتفاق نیفته.ممنون میشم کمک کنید

Raminab
جمعه 15 آبان 1394, 11:11 صبح
شاید راه حل یکم عجیب غریب باشه ولی جواب میده :لبخند:


public class Main {
static int num = 7;
public static void main(String args[]) {
int tempArray[] = {1,2,3,4,5,6,7,8};
int gameArray[][] = new int[3][3];
Random r = new Random();

for(int i = 0;i< 3;i++) {
for(int j =0;j<3;j++) {
if(i == 2 && j == 2)
continue;
int index;
if(num != 0){
index = r.nextInt(num );
}
else{
index = 0;
}
gameArray[i][j] = tempArray[index];

for(int k = index+1; k <= num ;k++) {
tempArray[k-1] = tempArray[k];
}
num --;
}
}
}
}

-سیّد-
شنبه 16 آبان 1394, 12:54 عصر
من از تمام دوستان خواهش می‌کنم به جای این که یه تیکه کد به عنوان جواب سؤالات اینجا قرار بدن، درباره‌ی کدشون توضیح بدن. هدف از این که اینجا سؤال و جواب می‌شه اینه که همه‌مون یه چیزی یاد بگیریم. یه قطعه کد بدون یه خط کامنت و بدون توضیح، خیلی نمی‌تونه برای یادگیری منبع خوبی باشه! مسابقه‌ی برنامه‌نویسی که نیست!

اما در جواب سؤال دوستمون: به نظرم راحت‌ترین کار اینه که شما یه آرایه‌ی یک بعدی از اعداد یک تا هشت بسازید که جاشون تصادفی باشه، بعد این آرایه رو به یه آرایه‌ی ۲ بعدی تبدیل کنید. یعنی ۳ تا اول می‌شن سطر اول، ۳ تا دوم سطر دوم، و ۲ تای آخر هم سطر آخر.
حالا برای این که یه آرایه‌ی یک بعدی از اعداد یک تا هشت با جای تصادفی بسازید، می‌تونید آرایه رو از یک تا هشت پر کنید، و بعد shuffle اش کنید. کلاس Collections یه تابع shuffle داره که برای List نوشته شده. می‌تونید از اون استفاده کنید. یا اگه به جای List آرایه دارید، می‌تونید از روش‌های دیگه استفاده کنید:
http://stackoverflow.com/questions/1519736/random-shuffling-of-an-array

Raminab
شنبه 16 آبان 1394, 20:46 عصر
آقا سید به نظر من هرجا ی چیز جواب میده , الان واقعا نمیدونم برای یک قطعه کد 20 خطی که توش هیچ کار خاصی انجام نشده چی باید توضیح داد , یه چیز دیگه که هست اینه باید هر جواب رو با توجه به سطح سوالی که پرسیده شده داد. شاید جواب سطح بالا خوب باشه ولی ممکنه کار کسی رو که سوال پرسیده رو راه نندازه , مثلا لینک زیر رو نگاه کنید هم جواب کوتاه توش هست که کار منو راه انداخت هم جواب با توضیحات تکمیلی هست که شاید کار ی بنده ی خدای دیگه ای راه بندازه ...
http://stackoverflow.com/questions/320542/how-to-get-the-path-of-a-running-jar-file

(http://stackoverflow.com/questions/320542/how-to-get-the-path-of-a-running-jar-file)

-سیّد-
شنبه 16 آبان 1394, 21:04 عصر
اولاً که اونجا جواب یه خط هست! نه یه کد به قول شما ۲۰ خطی با ۲ تا for تو در تو که توش یه مشت if هست!
بعد این که من ترجیح می‌دم برای اون یه خط کد هم یه خط توضیح ببینم (نه صد خط!). در حد این که چی کار می‌کنه. مگر این که واضح باشه. واقعاً کسی غیر از خود شما به این کد نگاه کنه نمی‌تونه چیزی بفهمه! البته اگه توش دقیق بشه و خط به خط بخونه و دنبال کنه بله، احتمالاً می‌فهمه.
توضیحی که من گفتم بدید منظورم توضیح طولانی نبود! در حد این که کلیت روش شما چیه. مثلاً این که هر دفعه یه خونه‌ی تصادفی از آرایه‌ی اعداد یک تا هشت رو انتخاب می‌کنید و توی خونه‌ی فعلی قرار می‌دید و بعد اعداد بعدیش رو شیفت می‌دید عقب.

البته سوء تفاهم نشه، منظور من این نبود که جواب شما به درد نمی‌خوره! حرف من اینه که اگه یه توضیح (هر چند کوتاه و کلی) هم کنارش بذارید، خیلی بهتر می‌شه. اینطوری کیفیت جواب‌های داده شده بالاتر می‌ره.