Android,Random不会连续两次重复相同的数字

时间:2014-12-01 21:13:44

标签: android random numbers duplicates generator

我需要用整数填充向量,但是我有一些麻烦,我需要用随机数填充它,但不是连续两个数字。 (例如,不是这样的:1,4,4,3,5,9) 我制作了这段代码,但效果不好:

  • @ first loja = 1;
  • 但直到游戏:loja ++;
  • int [] con;

随机方法:

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

工作代码:

    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++;
    }

结果是这样的:

  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
  8. 这不是我需要的,我需要数字真正随机,不像这样, 如果列表将是这样的东西将是伟大的:1,5,6,7,3,0,2,4,1,0,2,3 ...

    谢谢!

2 个答案:

答案 0 :(得分:1)

我创建了一个示例类

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));
    }
}

所有变量都是静态的,请注意我摆脱了i ++;在for循环结束时递增。

答案 1 :(得分:1)

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);
}