2016-06-12 10 views
-1

二重リンクリスト内のノードのコンテンツをランダムにスワップするにはどうすればいいですか?ノードを変更する必要はなく、ノードの内容のみを変更します。私はこのケースではforループに基づいてカードの数を識別するために乱数を得ることができた。しかし、私は彼らの内容を交換したいときに立ち往生している...誰でも助けることができる?二重リンクリスト

public class Deck { 

DoublyLinkedList<Card> mainDeck = new DoublyLinkedList<>(); 

String[] ranks = {"A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "Joker", "Queen", "King"}; 
String[] suits = {"Club", "Spade", "Diamond", "Heart"}; 

public Deck() { 
    for (String suit : suits) { 
     for (String rank : ranks) { 
      this.mainDeck.insertFirst(new Card(suit, rank)); 

     } 
    } 

} 

public DoublyLinkedList<Card> getDeck() { 
    return mainDeck; 
} 

public void swap() { 
    Random generator = new Random(); 
    Card temp; 
    for (int i = 0; i < 4; i++) { 
     int index1 = generator.nextInt(mainDeck.getSize() - 1); 
     int index2 = generator.nextInt(mainDeck.getSize() - 1); 
     temp = (Card)mainDeck. 
    } 
} 

}

+0

質問を編集してコードを投稿すると、質問と回答が自分の上に立つ必要があります。時間の経過とともにリンクが死ぬ。 – weston

+0

インデックスでカードを取得する方法はないので、できません。 'swap(int index1、int index2)'メソッドをリストに追加したいかもしれません。 – Andreas

+0

まさに私は何を考えている。インデックスでカードを取得する方法を作成するにはどうすればよいですか? @Andreas –

答えて

0

独自の二重リンクリストを展開する必要はありません、すでにoneがあります:

私はデッキのクラスを作成しました。

独自のものを使用する必要がある場合は、Listを次のように実装できます。

LinkedList<Card> list = ... 
Collections.shuffle(list); 

そして、私は自分のrandomを供給使用します:あなたは、このような二重にリンクされたリストで、ビルドなどList実装、LinkedListを使用している場合、あなたはCollections.shuffleを使用することができます

Collections.shuffle(list, new SecureRandom()); 
+0

今すぐご覧ください –

+0

あなたは質問にコードを入れなければなりません。 Googleドキュメントや外部の場所は許可されません。 – weston

+0

OPの 'DoublyLinkedList'クラスは' List'を実装していないので、['Collections.shuffle()'](http://docs.oracle.com/javase/7/docs/api/java/util/Collections.html# shuffle(java.util.List))は動作しません。 ---また、カードのシャッフルデッキは安全である必要はほとんどありません。標準的な「ランダム」はそれには全く問題ありません。 – Andreas

0

あなたが必要としています2つの一時的な変数は、スワップする二重リンクリスト(例えば、object1とobject2)の2つのオブジェクトを指します。最初にスワップする最初のオブジェクトのリストを検索します(スワップするオブジェクトの1つと一致する値またはIDを持つオブジェクトが見つかるまで、先頭オブジェクトから始まるリストを反復処理します)。オブジェクトを見つけると、object1をそのオブジェクトと等しく設定します。次に、オブジェクト2と同じことを行います。両方のオブジェクトへの参照があるので、単純なスワップを使って両方のアイテムの内容を入れ替えることができます。

+0

いいえ、カードをランダムに選び、他のカードと交換したいと思います。私はランダムにピッキングカードを完了しましたが、私はそれをスワップする方法については正気ではありません –

+0

あなたはあなたのリストにあるこのオブジェクトカードの中のオブジェクトを指す3つの一時変数を持っています。あなたがそれを行うことができる1つの方法は、最初にランダムに選択したカードにcard1を設定し、ランダムに選択した2枚目のカードにcard2を設定します。カード3のスーツとランク=カード1のスーツとランクを設定します。カード1のスーツとランク=カード2のスーツとランクを設定します。カード2のスーツとランク=カード3のスーツとランクを設定します。あなたはcard2のスーツとランクを持っているcard1になり、card2はcard1のスーツとランクを持って終わるでしょう。 card3は、メソッドの終了時に廃棄される一時変数です。 –

関連する問題