プログラムのどこからでもデッキにユニバーサルアクセスできるように、列挙型を使用してカードのデッキをシングルトンとして実装しています。列挙型のコンストラクターの一部として、すべてのカードで配列リストをシャッフルし、それらすべてをスタックにプッシュします (記号的に適切なようです)。
そのコンストラクターはいつ呼び出されますか? 実行時に構築されますか?コンパイル時間?初めて列挙型を呼び出すのは? プログラムを実行するたびに、カードのデッキが適切にランダム化されると期待できますか?
ありがとう!
プログラムのどこからでもデッキにユニバーサルアクセスできるように、列挙型を使用してカードのデッキをシングルトンとして実装しています。列挙型のコンストラクターの一部として、すべてのカードで配列リストをシャッフルし、それらすべてをスタックにプッシュします (記号的に適切なようです)。
そのコンストラクターはいつ呼び出されますか? 実行時に構築されますか?コンパイル時間?初めて列挙型を呼び出すのは? プログラムを実行するたびに、カードのデッキが適切にランダム化されると期待できますか?
ありがとう!
あなたはそれを間違った方法で設計していると思います。Anenumは、グローバル機能を持たないと想定されている一連の有限値を表します。それらは単なる定数であり、それぞれに機能を持たせることができますが、それ以上のことを行う価値はありません。
シャッフル機能を enum コンストラクター (いずれの場合でもすべての定数に対して呼び出される) でデッキに直接持ち込むことは、正しい方法ではないようです。
より良い解決策は、次のような 4 つの異なるクラスを持つことです。
enum Suit {
HEARTS,
CLUBS,
..
}
enum Value {
ACE,
TWO,
..
}
class Card {
Suit suit;
Value value;
}
class Deck {
List<Card> cards;
public void shuffle() { .. }
}
これにはシングルトンを使用しないでください。
しかし、質問に答えるために、列挙型クラス (Deck) がクラスローダーによってロードされて初期化されるときに、コンストラクターが呼び出されます。したがって、コード行が Deck クラスのメソッドを呼び出す前に、デッキがシャッフルされます。
列挙型ごとに、コンストラクターは、列挙型クラスが最初に順番に初期化されるときに呼び出されます。