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

Questa è una funzione che accetta una stringa come 12345 e deve restituire il risultato di 1 * 2 * 3 * 4 * 5. Tuttavia, sto tornando non ha alcun senso. In realtà, qual è la conversione implicita da Char a Int?Conversione Scala scalare a conversione

Sembra aggiungere 48 a tutti i valori. Se invece faccio product = product * (x.toInt - 48) i risultati sono corretti.

+9

Per un carattere, restituisce Toint il codice del carattere corrispondente. Usa x.asDigit per ottenere l'intero corrispondente a una cifra (questo funziona fino alla base 36 se includi lettere). –

risposta

50

Ha senso: questo è il modo in cui how characters encoded in ASCII table: 0 char map in decimale 48, 1 map a 49 e così via. Quindi, in pratica quando si converte char a int, tutto quello che dovete fare è quello di sottrarre solo '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 

o semplicemente usare x.asDigit, come ha detto @Reimer

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