Java でカードのデッキをシャッフルする
シャッフルという言葉は、文字通り、要素、オブジェクト、またはカードをランダムまたは未定義の順序で配置することを意味します。定義されたパターンに従わないオブジェクトリストは、シャッフルされたと見なされます。
同様に、Java では、さまざまなメソッドを使用して、ユーザーが要素をシャッフルできます。以下は、このプロセスを示すためのコードブロックです。
Java の従来のループを使用して ArrayList
をシャッフルする
import java.util.ArrayList;
public class Main {
private static final int SIZE_OF_DECK = 52;
public static void main(String[] args) {
ArrayList<Integer> cardsDeck = new ArrayList<>();
for (int i = 0; i < SIZE_OF_DECK; ++i) {
cardsDeck.add(i);
}
System.out.println("Deck Of Cards:" + cardsDeck);
ArrayList<Integer> shuffledDeck = new ArrayList<>();
while (cardsDeck.size() > 0) {
int index = (int) (Math.random() * cardsDeck.size());
int removedCard = cardsDeck.remove(index);
shuffledDeck.add(removedCard);
}
System.out.println("Shuffled Cards" + shuffledDeck);
}
}
上記のコードでは、ArrayList
がインスタンス化されています。作成されたインスタンスは、ArrayList
に要素を追加するのに役立ちます。リストは、0
から 51
の値の順番で埋められます。デッキサイズは、クラスレベルで宣言された静的変数です。
for
ループは条件をチェックします。初期値は静的デッキサイズ変数でチェックされます。ここで、初期リストをシャッフルするために、別の空の ArrayList
が作成されます。デッキサイズがゼロ値より大きくなければならないという条件で、while
ループを適用します。
この状態を維持するためのアイデアは、あるデッキの要素が削除され、別のシャッフルされたリストに配置されるためです。したがって、元のサイズは減少し続け、最終的にゼロになります。
ループ内では、random
関数を使用して最初にインデックスを見つけます。静的メソッドは Math
クラスに存在し、クラス名で直接呼び出されます。ユーティリティ関数は、0.0
から 1.0
の範囲の乱数を生成します。このメソッドは常に double
値を返します。
index
値を計算するには、形成された乱数に配列リストの現在のサイズを掛けます。したがって、毎回ランダムなインデックスを生成します。
これで、形成されたインデックスを使用して、元のデッキのインデックスにある要素が削除されます。remove
メソッドは ArrayList
クラスからのものであり、インデックスの特定の値を削除します。削除されるのは、インデックスまたはリスト内の位置です。
この関数は、リスト内のインデックスにある要素も返します。削除するオブジェクトが新しいシャッフルリストに追加されます。ループが続き、1つの要素が元のデッキのサイズを縮小します。したがって、次に繰り返すときに、新しいインデックスが生成されます。そして毎回、値が削除され、シャッフルされたリストに追加されます。
以下は、指定されたコードブロックの出力です。
Deck Of Cards:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51]
Shuffled Cards[51, 34, 28, 47, 14, 49, 42, 50, 26, 0, 44, 43, 2, 36, 30, 8, 46, 11, 21, 23, 7, 4, 33, 41, 32, 1, 20, 3, 10, 18, 6, 40, 29, 24, 31, 13, 45, 39, 22, 15, 27, 48, 9, 5, 25, 12, 38, 35, 37, 17, 16, 19]
Java でコレクション shuffle
関数を使用して ArrayList
をシャッフルする
以下は、shuffle
メソッドを使用したシャッフルを示すコードブロックです。
import java.util.ArrayList;
import java.util.Collections;
public class Main {
public static void main(String[] args) {
int deckSize = 52;
ArrayList<Integer> list = new ArrayList<>();
for (int i = 0; i < deckSize; ++i) {
list.add(i);
}
System.out.println("Sequential List: " + list);
Collections.shuffle(list);
System.out.println("Shuffled List: " + list);
}
}
コードブロックでは、ArrayList
のインスタンス化の手順は同じです。リスト内の要素の追加は、最初のコードの要素と同様に行われます。println
メソッドを使用して、順序付きリストをコンソールに出力します。
ここで、Collections
の shuffle
関数を呼び出します。このメソッドは順列を実行し、指定されたリストの値をランダムに計算します。この関数は、ランダムに選択された要素をリストにダンプします。提供されたリストが集合演算をサポートしていない場合、UnsupportedOperationException
をスローします。ランダムに形成されたリストは、元のリストと一緒にコンソールに出力されます。
Sequential List[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51]
Shuffled List[46, 5, 4, 0, 19, 11, 13, 21, 1, 38, 36, 29, 31, 35, 48, 22, 49, 6, 14, 51, 3, 47, 16, 12, 42, 27, 50, 40, 26, 30, 33, 9, 43, 39, 2, 10, 28, 44, 8, 24, 41, 32, 25, 45, 34, 7, 23, 15, 18, 20, 37, 17]
Rashmi is a professional Software Developer with hands on over varied tech stack. She has been working on Java, Springboot, Microservices, Typescript, MySQL, Graphql and more. She loves to spread knowledge via her writings. She is keen taking up new things and adopt in her career.
LinkedIn関連記事 - Java ArrayList
- Java で ArrayList のオブジェクトを日付でソートする方法
- Java ArrayList で一意の値を見つける
- Java の Vector と ArrayList
- Java のリストと Arraylist の違い
- Java で ArrayLists を比較する
- Java で ArrayList を int 型配列に変換する
関連記事 - Java Loop
- Java の forEach でインデックスを使用する
- Java Do-While ループとユーザー入力
- Java で while ループを終了する
- Java でネストされたループを解除する
- 2つの変数を持つ Java for ループ