我想在我的遊戲服務器中做一個PVP事件,它使用3個區域隨機完成。我使用下面的代碼,但總是返回值1和2並重復以上。我需要像這樣的一些序列:3-2-1-2-1-3或者從不重複相同數字的東西。沒有重複的隨機數字的序列
int random = Rnd.get(1, 3);
if (random == 1)
{
setstartedpvpzone1(true);
}
if (random == 2)
{
setstartedpvpzone2(true);
}
if (random == 3)
{
setstartedpvpzone3(true);
}
這是我得到RND:
public final class Rnd
{
/**
* This class extends {@link java.util.Random} but do not compare and store atomically.<br>
* Instead it`s using a simple volatile flag to ensure reading and storing the whole 64bit seed chunk.<br>
* This implementation is much faster on parallel access, but may generate the same seed for 2 threads.
* @author Forsaiken
* @see java.util.Random
*/
public static final class NonAtomicRandom extends Random
{
private static final long serialVersionUID = 1L;
private volatile long _seed;
public NonAtomicRandom()
{
this(++SEED_UNIQUIFIER + System.nanoTime());
}
public NonAtomicRandom(final long seed)
{
setSeed(seed);
}
@Override
public final int next(final int bits)
{
return (int) ((_seed = ((_seed * MULTIPLIER) + ADDEND) & MASK) >>> (48 - bits));
}
@Override
public final void setSeed(final long seed)
{
_seed = (seed^MULTIPLIER) & MASK;
}
}
和rnd.get:
/**
* Gets a random integer number from min(inclusive) to max(inclusive)
* @param min The minimum value
* @param max The maximum value
* @return A random integer number from min to max
*/
public static final int get(final int min, final int max)
{
return rnd.get(min, max);
}
O(1)中的[唯一(非重複)隨機數的可能重複?](http://stackoverflow.com/questions/196017/unique-non-repeating-random-numbers-in-o1) – Zong
什麼隨機數字庫是'Rnd'?這似乎不是Java標準的「隨機」庫。無論如何,我懷疑你傳遞給'get'的最終值是**獨佔**,所以'get(1,3)'意味着給我一個大於或等於1的值,但是**嚴格小於** 3.如果是這樣,改成'get(1,4)'應該有效。 –
請定義*「不要重複相同的數字」*考慮到'3-2-1-2-1-3'的示例顯示所有三個數字的重複。你是否意味着它應該在重新開始之前運行一系列非重複的數字?還是你的意思是說同一個號碼不可能彼此相鄰?或者是其他東西? – Andreas