0

我只是想获取与 String 键关联的 Int 值。我得到:

error: type mismatch;
found   : Char
required: String
    score += tiles(letter)

从我这里的代码:

val tiles = Map[String, Int](
    "a" -> 1,
    "b" -> 3,
    "c" -> 3,
    "d" -> 2
    // etc.
)

def main(args: Array[String]) {
    println("\nScrabble Calculator 1.0")
    println("Enter words on the commandline.")
    println("Use a '_' character for blank tiles.\n")

    for (w <- args)  // loop through each word
        if (w.length < 2)
            println(w + ": one-letter words disallowed in Scrabble")
        else
            calculate(w)
}

def calculate(w: String) {
    var score = 0
    for (letter <- w)
        score += tiles(letter)
    println(w + ": " + score + " points")
}

如果我使用 "a" 或 "b" 而不是letter,它可以正常工作(它返回 1 或 3 或其他)。

4

2 回答 2

1

哦,天哪。这是一个简单的语法问题。如果使用 ' 而不是 ",则将其解释为 Char:

val tiles = Map[Char, Int](
    'a' -> 1,
    'b' -> 3,
    'c' -> 3,
    'd' -> 2,
于 2012-09-03T21:19:39.183 回答
1

tiles是一个Map[String, Int]

calculate接受一个String论点,w. 它将单个字符拉出winto letter,因此letter是 type Char

然后,您尝试lettertiles. letter是一个Char,什么时候tiles需要一个String。这正是编译器通过该错误消息告诉您的内容。

于 2012-09-04T00:03:26.047 回答