PDA

View Full Version : سوال ) انتخاب اعداد تصادفی از آرایه (بدون تکرار)



Kasra_Zare
شنبه 18 مرداد 1393, 16:21 عصر
سلام به همه دوستان خسته نباشید

من یک آرایه رشته ای دارم ، که این آرایه 10 تا اندیس داره
میخوام به صورت تصادفی از اندیس یک تا ده با هر بار کلیک روی Button توی یک TextView به من نمایش بده ! با این تفاوت که تکرار نده ! یعنی یکبار عدد تصادفی من شد 5 دیگه اندیس 5 رو به من نمایش نده !

بعد که تموم اندیس ها رو نشون داد از یک تا 10 دوباره برگرده به حالت اول یعنی هرکدوم رو فقط یکبار نمایش بده !

-----------------
*دوستان میخوام هر بار که برنامه رو اجرا میکنم این خاصیت حفظ بشه ! یکی بار اول سه تا کلیک کردم اون سه تا اندیس دیگه باز نشه برای بار دوم که اومدم تو برنامه
-----------------
ممنون میشم کسی راهنماییم کنه ! امیدوارم درست توضیح داده باشم مشکل و سوالم رو

متشکرم

akbar8298
شنبه 18 مرداد 1393, 17:09 عصر
ArrayList<Integer> numbers = new ArrayList<Integer>();
private int getRandom(){
if(numbers.size()==10)
numbers.clear();

int c=0;
Random r =new Random();

while(numbers.contains(c=r.nextInt(10)));
numbers.add(c);

return c;
}



البته من این کد رو ذهنی نوشتم توی برنامه ممکنه اصلاحیاتی بخواد.

Kasra_Zare
شنبه 18 مرداد 1393, 19:39 عصر
ArrayList<Integer> numbers = new ArrayList<Integer>();
private int getRandom(){
if(numbers.size()==10)
numbers.clear();

int c=0;
Random r =new Random();

while(numbers.contains(c=r.nextInt(10)));
numbers.add(c);

return c;
}



البته من این کد رو ذهنی نوشتم توی برنامه ممکنه اصلاحیاتی بخواد.

این هنگام اجرا این کارو میکنه فکر کنم !

من میخوام دائمی باشه ! یعنی الان از آرایه عدد 1 رو تصادفی اورد دفعه بعد که اجرا کردم عدد یک رو نیاره ! فکر کنم کار دیتا بیسی داره و کلی درد سر

akbar8298
شنبه 18 مرداد 1393, 21:59 عصر
توی oncreate این کد رو بزار

final SharedPreferences mPrefs = PreferenceManager.getDefaultSharedPreferences(this );
String []nums = mPrefs.getString("nums", "").toString().split("\\|");

for(int i =0 ;i<nums.length ; i++){
try{
numbers.add(Integer.parseInt(nums[i]);
}
catch(Exception e){}
}


توی onDestroy هم این کد رو بزار


String n="";
for(int i =0;i<numbers.size();i++){
n=n+numbers.get(i) + "|";
}

SharedPreferences.Editor editor = mPrefs.edit();
editor.putString("nums",n);
editor.commit();


باز هم میگم این کد ها رو ذهنی نوشتم ممکنه تغییرات یا اشتباه نگارشی توش باشه.

Kasra_Zare
دوشنبه 20 مرداد 1393, 18:33 عصر
ممنون الان بخوام کدی اضافه کنم که 10 اندیس وقتی تک تک نشون داده شدن دوباره از نو شروع کنه به نشون دادن چکار باید بکنم؟
ممون میشم راهنماییم کنید