私はサイズxの配列を持っています。リストをランダムに移動する必要がありますが、各要素に一度到達する必要があります。これを行う最も効率的な方法は何ですか?あなたが探しているものをJava:配列をランダムに移動する方法は?
答えて
は
がthis-
// Create a list
List list = new ArrayList();
// Add elements to list
// Shuffle the elements in the list
Collections.shuffle(list);
// Create an array
String[] array = new String[]{"a", "b", "c"};
// Shuffle the elements in the array
Collections.shuffle(Arrays.asList(array));
だけshuffle配列を試してみて、それを反復シャッフルです。
Collections.shuffle(Arrays.asList(yourArrayReference));
コレクションが定義されていません。コレクションとは何ですか? – BenRacicot
[Javaコレクション](https://docs.oracle.com/javase/tutorial/collections/)。特にアルゴリズムのセクションを見てください。 – Mahesh
あなたは、ほとんどのオブジェクト指向言語では、デフォルトでは一般的に利用可能である乱数生成器を使用し、すでに確認何を追跡するために、二番目の配列を使用することができます。
基本的に:
- その後、確認...
- ...乱数がチェック済みの配列になっていない場合乱数
- のための主要な配列を検索
- 乱数を生成します要素配列[ランダム]
- 既にチェックされている配列の最後に乱数を追加する
これは、時間と空間を効率的に行う方法です。
import java.util.Enumeration;
import java.util.Random;
public class RandomPermuteIterator implements Enumeration<Long> {
int c = 1013904223, a = 1664525;
long seed, N, m, next;
boolean hasNext = true;
public RandomPermuteIterator(long N) throws Exception {
if (N <= 0 || N > Math.pow(2, 62)) throw new Exception("Unsupported size: " + N);
this.N = N;
m = (long) Math.pow(2, Math.ceil(Math.log(N)/Math.log(2)));
next = seed = new Random().nextInt((int) Math.min(N, Integer.MAX_VALUE));
}
public static void main(String[] args) throws Exception {
RandomPermuteIterator r = new RandomPermuteIterator(100);
while (r.hasMoreElements()) System.out.print(r.nextElement() + " ");
}
@Override
public boolean hasMoreElements() {
return hasNext;
}
@Override
public Long nextElement() {
next = (a * next + c) % m;
while (next >= N) next = (a * next + c) % m;
if (next == seed) hasNext = false;
return next;
}
}
これは非常に読みにくく、恐ろしいコードです。 5分後、私はまだ何が起きているのか分かりません。しかし、実際にアレイを通過する場合(OPの質問のように)、アレイは非常によく隠されていなければなりません。また、この質問はすでに4年前に答えられました。 –
配列のインデックスを擬似ランダムに列挙します。例えば上記のコードを実行すると、50のようなものが得られます52 3 6 45 40 26 49 92 11 80 2 4 19 86 61 65 44 27 62 5 32 82 9 84 35 38 77 72 7 ...インデックス0..99。 – aykutfirat
良いこと、ありがとう – msangel
- 1. Cで配列の途中にポインタを移動する方法
- 2. ランダムな単語の配列をハッシュタグの配列にフィルタリングする方法は?
- 3. json配列をJavaスクリプト関数に渡してランダムにjson配列にアクセスする方法
- 4. はランダムに配列
- 5. ランダムな移動は
- 6. ランダムに配列の値を表示する方法
- 7. Android/Java:配列に配列を追加する方法
- 8. as3ランダム配列 - ランダム化配列 - actionscript 3
- 9. ランダムな文字列の配列を作成する[Java]
- 10. セルオートマトンとランダム移動
- 11. 配列内のフィールドを移動する
- 12. 配列の要素を移動する#
- 13. PHPでイメージ配列をランダム化する方法
- 14. numpy配列の同一要素をサブアレイに移動する方法
- 15. Java:浮動小数点配列を逆順にソートする方法は?
- 16. ループの都合で文字列の配列をランダムにする方法
- 17. Javascriptでテーブルの周りをランダムに画像を移動する方法
- 18. Magentoテンプレートロゴを左の列に移動する方法は?
- 19. 2D Java配列から列を取得する方法は?
- 20. Clojure - java interop - 浮動小数点配列を渡す方法>
- 21. 配列を2つの配列にランダム化する
- 22. ランダムな配列値を生成するJava
- 23. 2つの配列を同じ方法でランダム化します。
- 24. ペインのランダムな場所にシェイプを配置する方法は?
- 25. ボタンをランダムに配置する方法は?
- 26. アンドロイド、動的たCharSequence配列を移入する方法(初期化しない?)
- 27. ノックアウト観測配列間のアイテムの移動を検出する方法
- 28. iphone:どのようにランダムに配列の要素を移動するための
- 29. 2D配列のランダムに選択された場所に文字列を配置する方法
- 30. カスタムエラーページに移動する方法は?
[一覧からn個のランダムな要素を取る?](http://stackoverflow.com/questions/4702036/take-n-random-elements-from-a-liste) –
templatetypedef
'の可能重複なく、各要素に一度到達する - これは、各要素を1回だけ取得することを意味しますか?シャッフル後に再びその要素を取得しないでください。 – Rakesh
@Rakesh、はい私は各要素を一度しか取得しません。 – dee