PDA

View Full Version : تولید اعداد رندوم غیر تکراری



mahdi68
چهارشنبه 13 مرداد 1389, 18:57 عصر
سلام
چجوری میشه اعداد رندوم غیر تکراری تولید کرد ؟ البته روش تولید اعداد رندوم میدونم فقط نمیخوام اعداد تکراری باشن
متشکرم

jlover
چهارشنبه 13 مرداد 1389, 20:42 عصر
ذات انتخاب تصادفی اینه که در هر بار تولید، هر کدوم از اعضای مجموعه (یا بازه) دارای شانس برابر برای گزینش هستند؛
یعنی اگر قرار باشه بین 1 و 5 سه عدد صحیح رو به تصادف انتخاب کنیم و اولین انتخاب مثلاً 2 باشه، در گزینش بعدی باز هم 2 با باقی اعضا شانس یکسانی داره
حالا بگذریم که اگه قرار باشه 6 عدد انتخاب بشند، ناگزیر یکیشون تکراری خواهد بود...

بنابراین برای رهیافت مورد نظرتون، می تونید خودتون یه کنترل ساده انجام بدید:
در صورتی عدد تصادفی تولید شده رو در محاسبات منظور کنید که تکراری نباشه و قاعدتاً هم باید اعداد قبلی رو ذخیره کرده باشید (مثلاً در یک آرایه)

تصور نمی کنم کلاسی این کار رو برای شما انجام بده و این وظیفه ی خودتونه

پیروز باشید

mahdi68
چهارشنبه 13 مرداد 1389, 22:17 عصر
من کد زیر نوشتم ولی یک ایراد داره اونم این هست که فقط اولین عددی که تولید میشه تکرار میکنه . من که متوجه نشدم چرا اینطوری میشه لطفا شما هم یک نگاه بکنید
متشکرم



package random_number_generating;

import java.util.Random;

public static void main(String[] args) {
int[] array1 = new int[9];
int x;
int count = 0;
System.out.println("Random Number Generator :");
Random random = new Random();
for (count = 0; count <= 8; count++) {
x = random.nextInt(10);
for (int i = 0; i <= 8; i++) {
if (x == array1[i]) {
x = random.nextInt(10);
i = 0;
}
}
array1[count] = x;
System.out.println(x);
}
}
}

jlover
پنج شنبه 14 مرداد 1389, 11:56 صبح
البته استثنا هم داشت...

run:
Random Number Generator :
6
5
9
2
4
1
3
7
8
BUILD SUCCESSFUL (total time: 0 seconds)


ولی شما اگه if رو با while جایگزین کنید، همه ی عناصر دنباله ی تولیدیتون، همیشه، متمایز میشه

راستی تو حلقه ی for دوم هم محدوده ی بالایی رو لازم نیست به طول آرایه بگذارید! به شماره ی دور تولید (count) بگذارید مقرون به صرفه تره، اقتصادی تره، زندگی هم که می دونید سخت شده، شمام که توی برنامه نویسی موبایل دست دارید، بیشتر از اینها باید توجه کنید به منابع سیستمی...:چشمک::لبخندساده:

mahdi68
پنج شنبه 14 مرداد 1389, 13:11 عصر
دوست عزیز من تغییر دادم تو کد ولی همچنان مشکل باقیست




package random_number_generating;

import java.util.Random;

/**
*
* @author mahdi
*/
public class Main {

/**
* @param args the command line arguments
*/
public static void main(String[] args) {
int[] array1 = new int[9];
int x;
int count = 0;
System.out.println("Random Number Generator :");
Random random = new Random();
while ( count <= 8) {
x = random.nextInt(10);
for (int i = 0; i <= count; i++) {
if (x == array1[i]) {
x = random.nextInt(10);
i = 0;
}
}
array1[count] = x;
System.out.println(x);
count++;
}
}
}

اینم خروجی :

run:
Random Number Generator :
5
9
4
8
3
2
1
7
5
BUILD SUCCESSFUL (total time: 0 seconds)
میبینید که بازم عدد اول تکرار شده

jlover
پنج شنبه 14 مرداد 1389, 14:36 عصر
یه بار دیگه عبارت پررنگ شده در پست قبلم رو بخونید لطفاً، اگه متوجه نشدید، ادامه ی این پست رو
.
.
.

import java.util.Random;

public class RandomSequence {

public static void main(String[] args) {
int[] rnadomStore = new int[9];
System.out.println("Distinctive Random Sequence of One-Digit Numbers:");

Random random = new Random();
int trial = 0;

for (int round = 0; round <= 8; round++) {
trial = random.nextInt(10);
for (int index = 0; index <= round; index++) {
while (trial == rnadomStore[index]) {
trial = random.nextInt(10);
index = 0;
}
}
rnadomStore[round] = trial;
}

for (int i = 0; i < rnadomStore.length; i++)
System.out.println(rnadomStore[i]);
}
}

mahdi68
پنج شنبه 14 مرداد 1389, 15:20 عصر
درسته حق با شماست من بی دقتی کردم