0

Java の本から学んだことを実践できるように、単純な Blackjack アプリケーションを作成しようとしています。

「プロジェクト」は決して展開されることはなく、それ自体が「重要」でもありません。それを念頭に置いて、私がカードのパックを保管するための最良の方法は何だと思いますか?

私の選択は、単純な配列、2 次元配列、ハッシュマップ、および配列リストのようです。

カードをコレクションに入れたら、構築するメソッドは次のようになると思います。

shuffleDeck() -
一目瞭然 removeCardsFromDeck() - したがって、これらのカードはゲームで「使用」されます
mergeNumberOfDecks(int howMany) - マージするカードのデッキ数 (例: 0 または 2 または 4 または 8)

単純な配列、2 次元配列、ハッシュマップ、配列リストのどれが最も扱いやすいと思いますか?

4

2 に答える 2

4

カードのスタック/デッキの状況のほとんどは、 を使用して解決するのが最適Dequeです。リストとキューの両方のメソッドを持ち、コレクションでもあるため、次のことができます。

Shuffle: Done by Collections.shuffle(List)(選択した両端キューが List も実装している場合)LinkedList例として参照

カードを取り除く: - 理想的には一番上のカード、Deque はremoveFirst()

Merge: java.util.collectionhas addAll(Collection)(つまり、コレクションを実装するクラスにはこのメソッドがあります)

于 2013-10-07T19:45:03.993 に答える
2

あなたがリストしたオプションの中で、Listおそらく最も理にかなっているのは、操作が簡単で、デッキをシャッフルした後もデッキの順序を維持できるからです。

本当にすべてを自分で実装したいのでない限り、あなたが言及した 3 つの方法は既に実装されています。

shuffleDeck():Collections.shuffle(List)

removeCardsFromDeck():

  • 単一のカードの場合、Collection.remove(Object) および関連するメソッド (例: List.remove(int index) またはLinkedList.removeFirst()/LinkedList.removeLast()またはStack.pop()) を使用できます。例として Stack を含めていますが、おそらく使用したくないことに注意してください。同期が必要な場合を除きます。
  • 複数のカードの場合、使用できますCollection.removeAll(Collection)

mergeNumberOfDecks():exactアナログはありませんCollection.addAll(Collection)が、作業が非常に簡単になります

List は Collection のすべてのメソッドを継承し、List を実装するすべてのクラスは List のすべてのメソッド (Collection から継承されたものを含む) の実装を定義する必要があることに注意してください。

于 2013-10-07T19:42:55.913 に答える