私はサイズ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. Javaの配列でランダムな色を取得する方法
- 2. Verilogでビット配列の配列をランダム化する方法は?
- 3. Javaすべての文字列の配列をランダムに印刷する方法
- 4. Cで配列の途中にポインタを移動する方法
- 5. ランダムな単語の配列をハッシュタグの配列にフィルタリングする方法は?
- 6. Java最後の配列要素を最初に移動する
- 7. json配列をJavaスクリプト関数に渡してランダムにjson配列にアクセスする方法
- 8. ランダムな移動は
- 9. 2Dオブジェクトの動的配列のフィールドに移動する方法は?
- 10. はランダムに配列
- 11. はランダムに配列
- 12. 1つの配列のデータを別の配列に動的に移動する方法
- 13. アセンブリ - eax(32ビット)の内容を16ビット配列に移動する方法は?
- 14. CSVファイルからフロート配列に値を移動する方法は?
- 15. 配列からランダムな要素を取得する方法は?
- 16. Reactで配列からランダムなオブジェクトをレンダリングする方法は?
- 17. pygameをクリックして画像をランダムな位置に移動する方法は?
- 18. Javaの円で配列ポインタを移動する
- 19. ランダムに配列の値を表示する方法
- 20. バイナリサーチツリーアルゴリズムにランダムな値の配列を入力する方法
- 21. Android/Java:配列に配列を追加する方法
- 22. 多次元配列の方向に数値を移動します。java
- 23. Cの配列から要素をランダムに選ぶ方法は?
- 24. 配列を使ってランダムな行列を作る方法
- 25. ランダムな文字列の配列を作成する[Java]
- 26. スプライトをランダムに選択したプリセット座標に移動する方法をスクラッチ
- 27. 2dのnumpyの配列からランダムに選択する方法
- 28. as3ランダム配列 - ランダム化配列 - actionscript 3
- 29. シフト配列をjavascriptで前方に移動する
- 30. numpy配列で値をランダムに列方向に割り当てる方法
[一覧からn個のランダムな要素を取る?](http://stackoverflow.com/questions/4702036/take-n-random-elements-from-a-liste) –
templatetypedef
'の可能重複なく、各要素に一度到達する - これは、各要素を1回だけ取得することを意味しますか?シャッフル後に再びその要素を取得しないでください。 – Rakesh
@Rakesh、はい私は各要素を一度しか取得しません。 – dee