2013-04-26 19 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; 
}; 

Bu 12345 gibi bir String alır ve 1 * 2 * 3 * 4 * 5 sonucunu dönmelidir bir işlevdir int Char. Ancak, geri döneceğim hiçbir şey ifade etmiyor. Gerçekte Char ile Int arasındaki örtük dönüşüm nedir?Scala dönüşüme

Tüm değerlere 48 ekleniyor gibi görünüyor. Bunun yerine product = product * (x.toInt - 48) yapsam sonuçlar doğrudur.

+9

söylediği gibi karşılık gelen karakter kodu. Bir basamağa karşılık gelen tamsayıyı almak için x.asDigit'i kullanın (harfleri dahil ederseniz bu, 36'ya kadar çalışır). –

cevap

50

Mantıklı: how characters encoded in ASCII table: 0 char, ondalık 48, 1 harita 49 ve bu şekilde eşleşir. Yani temelde int karakter dönüştürdüğüüzde, tüm yapmanız gereken sadece çıkarmak olduğunu '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 

Ya da sadece x.asDigit kullanın @Reimer, toInt döner bir karakter için

scala> '1'.asDigit 
// res5: Int = 1