2017-02-16 16 views
1

私は、7つの要素[12, 13, 17, 18, 19, 11, 20]を含むlistというjavaの整数のArraylistを持っています。ランダムな順序でリストの最後に同じ要素を2回コピーしたいので、最終的に7つの項目ごとに同じ順序で同じ整数を3回(合計21項目)並べ替える必要があります。 Javaでどうすればいいですか?リスト内の項目の位置を複製してランダム化する

+0

私はあなたの質問を得ることはありません、あなたは21のintリストで終わるつもりですか、あなたは無作為に選んだ数字を別の場所にコピーしていますか? – rakwaht

+0

私たちがそれらをすべて複製してからランダム化するか、それを複製して同時にランダム化するかどうかは重要です。 –

+1

あなたは 'Collections.shuffle(copyList);を実行する別のarraylistに要素をコピーすることができます。その後、これらのシャッフルされたコピーを元のarraylistに追加します。 – matoni

答えて

1

リストをコピーし、繰り返しごとにシャッフルしてください。

final int DUPLICATE_AMOUNT = 3; // if you want the created array 3 times as big as the original 

List<Integer> list = getMyList(); //original list 
List<Integer> fullRandom = new ArrayList<Integer>(); 
fullRandom.addAll(list); 
for (int i = 1; i < DUPLICATE_AMOUNT; i++) { 
    List<Integer> randomList = new ArrayList<Integer>(); 
    randomList.addAll(list); 
    Collections.shuffle(randomList); 
    fullRandom.addAll(randomList); 
} 
+0

私の最初のリストはArrayListです。 addAllを実行するには、リストに最初に変換することは可能ですか? – konstantin

+0

技術的には間違いがありますが、あなたが誤解を招くような 'int i = 1'で' DUPLICATE_AMOUNT'を使用しています。 1) "重複"は追加のコピーまたは全体を(あなたが意図した通りに)記述することができます2)人々はあなたの 'int i = 1'を逃して誤解する可能性があるので' int i = 0'に慣れています。あなたの答えには何も問題はありませんが、私は 'ADDITIONAL_COPIES = 2' +' int i = 0'はもっとはっきりしていると思います。 – Aaron

+1

@ Constantin 'ArrayList'は' List'の実装です。キャストする必要はありません。 – Aaron

1

はわずか2回あなたのリストをコピーして、それをシャッフル:

List<Integer> tempList = new ArrayList<>(yourList); 

for(int i = 0; i < 2; i++){ 
    Collections.shuffle(tempList, new Random(System.nanoTime())); 
    yourList.addAll(tempList); 
} 
+1

@Aaron Thxを入力してください。私はそれを編集しました。 – Christian

1
// init your list 
List<Integer> initialList = new ArrayList<Integer>(); 
initialList.add(new Integer(12)); 
initialList.add(new Integer(13)); 
initialList.add(new Integer(14)); 
initialList.add(new Integer(15)); 
// create a new list that'll contain your random numbers 
List<Integer> tripleList = new ArrayList<Integer>(); 
// triple your values 
tripleList.addAll(initialList); 
tripleList.addAll(initialList); 
tripleList.addAll(initialList); 
// randomize their order 
Collections.shuffle(tripleList); 
// until is empty get the top of the list with this command. 
//A random number among your list 
tripleList.remove(0); 
1

Collections.shuffle()を使用して試してみて、初期データリストについては、それを2回呼び出します。

private List<Integer> shufflePositions(List<Integer> data) { 
    Collections.shuffle(data); 
    return data; 
} 

public void solve() { 
    List<Integer> data = new ArrayList<>(); 
    data.add(12); 
    data.add(13); 
    data.add(17); 
    data.add(18); 
    data.add(19); 
    data.add(11); 
    data.add(20); 
    List<Integer> result = new ArrayList<>(); 
    result.addAll(data); 
    result.addAll(shufflePositions(new ArrayList<>(data))); 
    result.addAll(shufflePositions(new ArrayList<>(data))); 
} 
1

はこれを試してみてください。

List<Integer> integers = new ArrayList<>(Arrays.asList(12, 13, 17, 18, 19, 11, 20)); 

for(int i=0; i<2; i++) { 

    List<Integer> IntegersClone = new ArrayList<>(integers); 

    Collections.shuffle(IntegersClone); 

    integers.addAll(IntegersClone); 
} 

//Output : [12, 13, 17, 18, 19, 11, 20, 19, 17, 12, 11, 20, 18, 13, 20, 12, 19, 11, 18, 13, 13, 11, 17, 18, 19, 12, 17, 20] 
System.out.print(integers); 
関連する問題