随机不排除我的号码

时间:2017-03-09 02:19:58

标签: java random int

我目前正在制作应用。我的应用程序涉及3个不同的按钮,其随机值为1-3,但每个值都需要用完。所以我设置代码的方式是我有一个随机化数字并排除某些数字的方法。这与常数完美配合,但是这些值有时会重叠并且彼此相等。为什么会这样?

private void randomizeKeys(){
    key1 = (int)(Math.random()*3+1);
    key2 = getRandomWithExclusion(new Random(),1,3,key1);
    int[] arr1 = {key2,key1};
    key3 = getRandomWithExclusion(new Random(),1,3,arr1);


}

private int getRandomWithExclusion(Random rnd, int start, int end, int... exclude) {
    int random = start + rnd.nextInt(end - start + 1 - exclude.length);
    for (int ex : exclude) {
        if (random < ex) {
            break;
        }
        random++;
    }
    return random;
}

输出示例: key1 = 1,key2 = 2,key3 = 1但是key3应该等于3

1 个答案:

答案 0 :(得分:2)

您应该使用调试器来查看导致错误在您的代码中发生的确切原因。 (提示:你过早地突破了循环)

实现产生3个随机数的相同目标的另一种方法是:

List<Integer> numbers = Arrays.asList(1, 2, 3);
Collections.shuffle(numbers);

现在,您可以使用numbers.get(0)作为第一个密钥,numbers.get(1)作为第二个密钥,依此类推。