H3ll0 H3ll0 - 1 year ago 79
Android Question

How to prevent a value from being generated in a random int? (Java)

I have two randomly generated variables. LoadG4 is outputted to one button and the other 3 buttons have a differing value for randoms1 generated. My aim here is to ensure that no value of the randomly generated randoms1 is equal to LoadG4. For example if the range is between 0 to 9 and LoadG4 ends up being 3, the other random numbers from randoms1.nextint... must not be 3. They could be 7, 4, or 5 for example, but not the same as LoadG4.

Here's my code:

Random GenerateG4 = new Random();
int loadG4 = GenerateG4.nextInt(10);
Random randoms1 = new Random();
final TextView number = (TextView) findViewById(R.id.number);
for(int allrbA=0; allrbA<4; allrbA++) {

How could I do this?

Many thanks in advance.


if (rbvalue==loadG4) {
int realrbvalue = rbvalue++;
else {

Why does this still not work?

Answer Source

A variation of the comment:

for(int allrbA=0; allrbA<4; allrbA++) {
   int r = randoms1.nextInt(10 - 1); // range one less because one will be skipped
   if (r == load4G) r = 9;           // don't want this one, take the one
                                     // that would have been included in the full range

   selectrb[allrbA].setText("" + r);

The comment proposal is to add one to r for any random value where r >= load4G - this implies that the final value of r could never equal load4G - which has the same net effect.

With a loop to re-generate a new random:

for(int allrbA=0; allrbA<4; allrbA++) {
   int r; 
   do {
      r = randoms1.nextInt(10);   // get a random number
   } while (r == load4G);         // until it is different

   selectrb[allrbA].setText("" + r);

If all the random numbers must be different a (Fisher-Yates) shuffle would be an appropriate solution.

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download