0

ブラックジャック ゲームの基本戦略を、値が文字列の固定長配列である整数キーを持つマップとして表現しようとしています。キーはプレーヤーの手札の値を表し、配列インデックスはディーラーのアップ カードの値を表します (したがって、カードの値 2 ~ 11 に対応するサイズ 10 の固定長配列)。ディーラーのアップ カードに対応する位置にある配列の文字列値には、理想的なプレイ (ステイ、ヒット、スプリット、ダブル) が含まれます。

IE) プレーヤーの手札の値はハード 8、ディーラーのアップ カードは 2 です。基本的な戦略では、プレーヤーはヒットする必要があります。マップを使用してこれを判断するには、キーが 8 (プレイヤー ハンドの値 = 8) の配列を取得し、配列インデックス 0 (ディーラー アップ カード = 2) の文字列を調べます。

私はそれをこのように定義しようとしました:

val hardHandBasicStrategy = collection.mutable.Map[Int,Array[String](10)]

しかし、Scalaはこれが気に入らないようです...

私が間違ったことを理解するのを手伝ってください、および/またはそれを機能させる方法を提案してください。

4

1 に答える 1

2

Scala には、固定サイズの配列を表す型がありません。サイズが 10 の配列を単純に使用することもできます (これは通常行われていることです)。または、実際にサイズが 10 であることをより確実に保証したい場合は、10 の長さの配列クラスを自分で作成することもできます。

class ArrayTen[T: ClassManifest](zero: T) {
  protected val data = Array.fill(10)(zero)
  def apply(i: Int) = data(i)
  def update(i: Int, t: T) { data(i) = t }
  protected def set(ts: Array[T]) { for (i <- data.indices) data(i) = ts(i) }
  def map[U: ClassManifest](f: T => U) = { 
    val at = new ArrayTen(null.asInstanceOf[U])
    at.set(data.map(f))
    at
  }
  def foreach(f: T => Unit) { data.map(f) }
  override def toString = data.mkString("#10[",",","]")
  override def hashCode = scala.util.MurmurHash.arrayHash(data)
  override def equals(a: Any) = a match {
    case a: ArrayTen[_] => (data,a.data).zipped.forall(_ == _)
    case _ => false
  }
  // Add other methods here if you really need them
}

例:

scala> new ArrayTen("(nothing)")
res1: ArrayTen[java.lang.String] = 
  #10[(nothing),(nothing),(nothing),(nothing),(nothing),
  (nothing),(nothing),(nothing),(nothing),(nothing)]

scala> res1(3) = "something!!!"

scala> res1
res3: ArrayTen[java.lang.String] = 
  #10[(nothing),(nothing),(nothing),something!!!,(nothing),
  (nothing),(nothing),(nothing),(nothing),(nothing)]

長さを決定するパラメータを取るために固定長配列が必要な場合は、

trait Size { size: Int }
class ArraySize[S <: Size, T: ClassManifest](zero: T, s: Size) {
  protected val data = Array.fill(s.size)(zero)
  ...
}

再実装しない限り、すべてのコレクションの機能を利用できるわけではありませんがほとんどの機能は配列の長さを変更できるため、ほとんどの機能は必要ありません。

于 2012-10-04T21:06:54.387 に答える