Java:固定范围内的随机数,不包括指定的数字

Zip*_*ppy 3 java random int

在我的(Java Android)游戏中,我在随机位置产生硬币.

硬币可以在屏幕的水平方向上出现在6个位置中的一个位置(每个水平位置最多2个).

我所做的是为第一枚硬币创建0到5之间的随机数,然后我想生成另一个随机数,不包括第一枚硬币的位置.

因此,例如,硬币1在0到5之间的随机位置产生 - 所以让我们说4.

然后下一个硬币需要能够在0-3或5之间进行选择.(基本上0-5除了4).

我已经设法做到了,但它不是很优雅,我敢肯定必须有一个更好/更清洁的方法来实现这一点,但是,它逃脱了我.

下面代码中的random(int number)方法只返回一个从0到数字1的随机int(使用nextInt),randomBool()只返回一个随机布尔值

另外,请记住,我不想使用任何技术来保持重新生成一个随机数,如果它产生的那个等于我们试图避免的那个.

    //Return a random number between 0 and 5 excluding the specified number
    private int getRandomExcluding(int excludedNumber){

        //If previous position was 0 then generate a number between 1 and 5
        if (excludedNumber==0){
                return random(5)+1;
        }
        //If position was 5, then generate and return number from 0-4
        else if (excludedNumber==5){
                return random(5);
        }

        //If number isn't 0 or 5 (then it is in range of 1-4 use a random bool to determine
        // if we are going to get a number less than or greater than the number we are excluding

        //True - get number lower than excluded number
        else if(randomBool()){

            //Excluded number is 1
            if (excludedNumber==1){
                return 0;  //Only posibility
            }

            //Excluded number is > 1
            else {
                //Return a random number between 0 (inclusive) and the excluded number (exclusive)
                return random(excludedNumber);
                }

        //False - get number higher than the excluded number (between exludedNumber+1 (inclusive) and 6(exlusive))
        else {
                return random(6-(excludedNumber+1))+(excludedNumber+1);
        }
    }
Run Code Online (Sandbox Code Playgroud)

ass*_*ias 6

您可以填充列表并将其随机播放:

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
Collections.shuffle(numbers);
int coin1 = numbers.get(0);
int coin2 = numbers.get(1);
Run Code Online (Sandbox Code Playgroud)

  • 您可能想使用[`shuffle(numbers,new SecureRandom)`](https://docs.oracle.com/javase/6/docs/api/java/util/Collections.html#shuffle(java.util.List) ,%20java.util.Random()))用于最佳分配,通常对于游戏很重要. (3认同)