我需要指定範圍內的唯一隨機整數。我使用這種方法:在Java中生成唯一隨機數的更好方法
class Main
{
static final int RANGE = 100;
static int uniqueGenerator(int range_, boolean boolArr_[], Random rand_)
{
int tmpVar = rand_.nextInt(range_);
while (boolArr_[tmpVar] == true)
{
tmpVar = rand.nextInt(range_);
}
boolArr_[tmpVar] = true;
return tmpVar;
}
public static void main(String[] args)
{
Random rand = new Random();
boolean boolArr[] = new boolean[RANGE];
Arrays.fill(boolArr, false);
int ceiling = 10;
int tmp = Main.uniqueGenerator(ceiling, boolArr, rand);
System.out.println(tmp); => 5
ceiling = 20;
tmp = Main.uniqueGenerator(ceiling, boolArr);
System.out.println(tmp); => 17
}
}
它似乎很麻煩。也許有人知道更好的方法? 編輯:我在遊戲代碼中使用它,所以我需要最有效的解決方案。下面的答案建議初始化新的列表,洗牌=>太耗費資源/每次需要更改範圍時都需要生成新列表。
隨機數。如果你填寫你的布爾數組假的,它永遠不會進入while循環,不是嗎? – 2013-03-09 10:40:10
你需要什麼?範圍在0-100之間的唯一整數? – 2013-03-09 10:40:57
您是否需要範圍內的獨特或範圍內的獨特隨機? – GeorgeVremescu 2013-03-09 10:41:45