java - Random number generator generates duplicates -




framework: java

public static list<integer> buttonidlist = new arraylist();  public void mymainmethod() {    for(integer = 0; < 11; i++) {       int randombuttonid = getuniqueidnumber();    } }  private static integer getuniqueidnumber() {         random ran = new random();         int randombuttonid = ran.nextint(20) + 1;          if(buttonidlist.contains(randombuttonid)) {             getuniqueidnumber();         } else {             buttonidlist.add(randombuttonid);         }          return randombuttonid;     } 

when code encounters duplicate, calls (recursively) , in second try if number unique return statement returns mymainmethod or getuniqueidnumber?

where should return statement placed?

you should return result of recursive call:

private static integer getuniqueidnumber() {     random ran = new random();     int randombuttonid = ran.nextint(20) + 1;      if(buttonidlist.contains(randombuttonid)) {         return getuniqueidnumber();     } else {         buttonidlist.add(randombuttonid);     }      return randombuttonid; } 

p.s., better make random ran static variable instead of creating new random instance in each recursive call.

private static random ran = new random(); private static integer getuniqueidnumber() {     int randombuttonid = ran.nextint(20) + 1;     if(buttonidlist.contains(randombuttonid)) {         return getuniqueidnumber();     } else {         buttonidlist.add(randombuttonid);         return randombuttonid;     } } 

and might consider changing buttonidlist hashset (or linkedhashset if care insertion order) in order make search existing number more efficient.





wiki

Comments

Popular posts from this blog

python - Read npy file directly from S3 StreamingBody -

kotlin - Out-projected type in generic interface prohibits the use of metod with generic parameter -

Asterisk AGI Python Script to Dialplan does not work -