2013-04-26 25 views
23
def multiplyStringNumericChars(list: String): Int = { 
    var product = 1; 
    println(s"The actual thing + $list") 
    list.foreach(x => { println(x.toInt); 
         product = product * x.toInt; 
        }); 

    product; 
}; 

12345のような文字列を受け取り、1 * 2 * 3 * 4 * 5の結果を返す関数です。しかし、私は戻ってくることは意味をなさない。 CharからIntへの暗黙の変換は実際に何を返すのですか?スカラーcharからintへの変換

すべての値に48を追加しているようです。代わりにproduct = product * (x.toInt - 48)を実行した場合、結果は正しいです。

+9

言ったように対応する文字コード。 x.asDigitを使用して数字に対応する整数を取得します(これは、文字を含めると、基数36まで有効です)。 –

答えて

50

それは意味があります:それは方法ですhow characters encoded in ASCII table:0 charは10進数48に、1は49にマップされます。だから、基本的にはintへのcharに変換するとき、あなたがする必要があるすべてはただ減算することである「0」:

scala> '1'.toInt 
// res1: Int = 49 

scala> '0'.toInt 
// res2: Int = 48 

scala> '1'.toInt - 48 
// res3: Int = 1 

scala> '1' - '0' 
// res4: Int = 1 

それともx.asDigitを使用し、@Reimerは、オーバーライド:戻り、文字の

scala> '1'.asDigit 
// res5: Int = 1 
関連する問題