1

プログラムのどこからでもデッキにユニバーサルアクセスできるように、列挙型を使用してカードのデッキをシングルトンとして実装しています。列挙型のコンストラクターの一部として、すべてのカードで配列リストをシャッフルし、それらすべてをスタックにプッシュします (記号的に適切なようです)。

そのコンストラクターはいつ呼び出されますか? 実行時に構築されますか?コンパイル時間?初めて列挙型を呼び出すのは? プログラムを実行するたびに、カードのデッキが適切にランダム化されると期待できますか?

ありがとう!

4

3 に答える 3

3

あなたはそれを間違った方法で設計していると思います。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() { .. }
}
于 2013-02-04T16:19:06.733 に答える
3

これにはシングルトンを使用しないでください。

しかし、質問に答えるために、列挙型クラス (Deck) がクラスローダーによってロードされて初期化されるときに、コンストラクターが呼び出されます。したがって、コード行が Deck クラスのメソッドを呼び出す前に、デッキがシャッフルされます。

于 2013-02-04T16:20:14.663 に答える
0

列挙型ごとに、コンストラクターは、列挙型クラスが最初に順番に初期化されるときに呼び出されます。

于 2013-02-04T16:20:47.840 に答える