指定された範囲で一意のランダムな int が必要です。私はこのアプローチを使用します:
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
}
}
面倒そうです。多分誰かがより良いアプローチを知っていますか?編集:ゲームコードで使用するため、最も効率的なソリューションが必要です。以下の回答は、新しいリストを初期化してシャッフルすることを提案しています=>リソースを消費しすぎている/範囲を変更する必要があるたびに新しいリストを生成する必要があります。