PDA

View Full Version : رندوم در اندروید!



omid.n1990
یک شنبه 23 شهریور 1393, 04:07 صبح
سلام، میخوام یک سری عدد رندوم انتخاب کنم به صورت زیر:
بازه ی انتخابی بین 0 تا 20 است
حال میخوام 21 عدد از این بازه انتخاب کنم که تکراری نباشن. در واقع تمام اعداد 0 تا 20 رو میخوام ولی به صورت درهم و هر مرتبه متفاوت! چطوری میتوم انجام بدم؟

NeoFighT
یک شنبه 23 شهریور 1393, 08:55 صبح
import java.util.ArrayList;
import java.util.Random;
import android.app.Activity;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.widget.Toast;

public class MainActivity extends Activity {
final int NUMS = 21;
SharedPreferences sp;
SharedPreferences.Editor edit;
ArrayList<Integer> list;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

sp = getSharedPreferences("mySp",MODE_PRIVATE);
edit = sp.edit();
list = new ArrayList<>();

if(sp.getBoolean("isFirst",true)){
Toast.makeText(getBaseContext(),"Repeat...",Toast.LENGTH_SHORT).show();
for(int i=1;i<=NUMS;i++){
edit.putBoolean("int_" + i,false);
}
edit.putBoolean("isFirst", false);
edit.commit();
}

for(int i=1;i<=NUMS;i++){
if(!sp.getBoolean("int_"+i,false))
list.add(i);
}

if(list.size()==0){
edit.putBoolean("isFirst",true);
edit.commit();
return;
}else{
Random r = new Random();
int i = r.nextInt(list.size());
int n = list.get(i);

edit.putBoolean("int_"+n,true);
edit.commit();
Toast.makeText(getBaseContext(),"--" + n + "--",Toast.LENGTH_SHORT).show();
if(list.size()==1){
edit.putBoolean("isFirst",true);
edit.commit();
return;
}
}
}
}


میتونی از این کد استفاده کنی.

omid.n1990
یک شنبه 23 شهریور 1393, 13:26 عصر
کدی که گذاشتید بیش از حد برای این کار پیچیده است و بعید میدونم اینقدر زحمت بخواد. کد زیر رو پیدا کردم که بهتر میاد:


String [] file = {"0","1","2","3","4","5"};
ArrayList<String> fileList = new ArrayList<String>(Arrays.asList(file));
long seed = System.nanoTime();
Collections.shuffle(fileList, new Random(seed));

momayyezi_m
یک شنبه 23 شهریور 1393, 17:19 عصر
لطفا کد رو اول تو note کپی کن و بعدش از اونجا کد ها رو اینجا بذار .مستقیم از اکلیپس اینجا paste نکن .ممنون



String [] file = {"0","1","2","3","4","5"};

ArrayList<String> fileList = new ArrayList<String>(Arrays.asList(file));

long seed = System.nanoTime();

Collections.shuffle(fileList, new Random(seed));

omid.n1990
یک شنبه 23 شهریور 1393, 17:24 عصر
نمیدونم چرا هرازگاهی با کد گذاشتن اینجا مشکل پیدا میکنم! با مروگر خاصی مشکل داره؟

momayyezi_m
یک شنبه 23 شهریور 1393, 17:26 عصر
نه ...مستقیم که از اکلیپس کدها رو اینجا paste کنی اینجور میشه

omid.n1990
یک شنبه 23 شهریور 1393, 18:04 عصر
سوالی دیگر در مورد رندوم.
من از صفر تا بیست میخوام پانزده عدد به صورت تصادفی انتخاب کنم انتخاب کنی به طوری هر عدد حداکثر دوبار انتخاب بشه و طوری نشه که یک عدد بیش از دوبار ظاهر بشه چه روشی میشه برای اینکار به کاربرد؟ به جز استفاده از ifها و حلقه برای بررسی اعداد انتخاب شده؟