在我的(Java Android)游戏中,我会在随机位置生成硬币。这些硬币可以出现在屏幕横向的 6 个位置之一(每个水平级别最多 2 个)。我创建了一个介于 0 和 5 之间的随机数来生成第一个硬币,然后我想要生成另一个随机数,但排除第一个硬币的位置。例如,硬币 1 生成在 0 到 5 之间的随机位置 - 假设是 4。接下来的硬币需要能够在 0-3 或 5 之间选择(基本上是 0-5 排除 4)。我已经实现了它,但它并不太优雅,我确定肯定有更好/更清晰的方法来实现此目的,但我还没想到。下面的代码中,random(int number)方法仅返回从 0 到 number-1 的随机 int(使用 nextInt),而 randomBool()仅返回随机 boolean。请注意,我不想使用任何技术,如果产生的随机数等于我们要避免的随机数,则不断重新生成随机数。
//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);
}
}