0

間隔からランダムな一意の整数を生成したいのですが、アプリがフリーズします(無限ループ)。

int[] ids = new int[200];
for(int i = 0; i < ids.length; i++){
   int temp = getUnique(ids);
   ids[i] = temp;
}

private int getUnique(int[] ids){
   while(true){
      int iRand = random(0, ids.length);
      if( unique( ids, iRand ) ) return iRand;
   }
}

private boolean unique(int[] arr, int i){
    for(int k : arr){
        if(k == i) return false;
    }

    return true;
}

private int random(int Min, int Max){
   return Min + (int)(Math.random() * ((Max - Min) + 1));
}

0から200までの整数の配列をランダムにソートしたいと思います。理由はわかりませんが、アプリケーションがフリーズしています。なんで?問題はどこだ?

4

2 に答える 2

6

Collections.shuffle(...)リストのランダム化に使用することを検討してください。

例えば:

Integer[] ids = getArrayOfNumbers();
List<Integer> idList = Arrays.asList(ids);
Collections.shuffle(idList);
ids = idList.toArray(ids);
于 2013-02-14T00:22:26.153 に答える
1

乱数を生成してからそれが一意であるかどうかを確認するのに非常に長い時間がかかる可能性があるため、並べ替えた配列に必要な数値を挿入してからシャッフルすることをお勧めします。

于 2013-02-14T00:24:31.693 に答える