Web.11
Web.11

Reputation: 416

Android, Random do not repeat same number twice in a row

I need to fill a vector with integers, but I have some troubles, I need to fill it with random numbers, but not two numbers in a row. (ex. not like this: 1,4,4,3,5,9) I made this code but it does not work well :

Random Method :

private int nasiqim (int max){
Random nasiqimi = new Random();
int i = 0;
i=nasiqimi.nextInt(max);
return i;
}

Working Code :

    int i;
    con = new int [loja];
    for (i=0; i<loja; i++)
    {
        con[i] = nasiqim(8);
        if(i>0){
        while(con[i]==con[i-1])
        {
        con[i] =nasiqim(8); 
        }
        }
        i++;
    }

The results are like this:

  1. 1
  2. 1,4
  3. 1,4,1
  4. 1,4,1,4
  5. 1,4,1,4,1
  6. 5,3,5,3,5,3
  7. 5,3,5,3,5,3,5

And this is not what I need, I need the numbers to really random, not like this, Will be great if list will be like this something : 1,5,6,7,3,0,2,4,1,0,2,3...

Thank you!!

Upvotes: 1

Views: 646

Answers (2)

aadi53
aadi53

Reputation: 449

private int[]           con         = null;

private final Random    nasiqimi    = new Random();

/**
 * Test run random.
 */
@Test
public void testRunRandom() {
    int loja = 10;
    con = new int[loja];
    for (int i = 0; i < loja; i++) {
        int nextRandom = 0;
        while (true) {
            nextRandom = nasiqim(8);
            if (i == 0 || con[i - 1] != nextRandom) {
                con[i] = nextRandom;
                break;
            }
        }
    }

}

/**
 * Gets the random.
 * 
 * @param max the max
 * @return the random
 */
private int nasiqim(int max) {
    return nasiqimi.nextInt(max);
}

Upvotes: 1

enrique7mc
enrique7mc

Reputation: 907

I've created a sample class

import java.util.*;

public class Foo {

    static Random r = new Random();
    static int[] con;
    static int loja = 8;

    private static int randomInt(int max) {
        return r.nextInt(max);
    }

    public static void main(String args[]) {
        int i;
        con = new int[loja];
        for (i = 0; i < loja; i++) {
            con[i] = randomInt(8);
            if (i > 0) {
                while (con[i] == con[i - 1]) {
                    con[i] = randomInt(8);
                }
            }
        }

        System.out.println( Arrays.toString(con));
    }
}

All variables are static, notice I get rid of the i++; increment at the end of the for loop.

Upvotes: 1

Related Questions