Scala char a int conversión

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;
};

Esta es una función que toma una Cadena como 12345 y debe devolver el resultado de 1 * 2 * 3 * 4 * 5. Sin embargo, estoy recibiendo no tiene ningún sentido. ¿Qué es la conversión implícita de Char a Int en realidad regresar?

Parece ser la adición de 48 a todos los valores. Si por el contrario tengo que hacer product = product * (x.toInt - 48) los resultados son correctos.

  • Para un personaje, toInt devuelve el carácter correspondiente código. Uso de la x.asDigit para obtener el entero correspondiente a un dígito (esto funciona para hasta 36 base si se incluyen las letras).
InformationsquelleAutor flavian | 2013-04-26

1 Kommentar

  1. 65

    Tiene sentido: que es la forma en que cómo caracteres codificados en ASCII tabla: 0 char mapas a decimal 48, 1 se asigna a 49 y así sucesivamente. Así que, básicamente, al convertir char a int, todo lo que necesita hacer es restar ‘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, simplemente, utilizar x.asDigit, como @Reimer dijo

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

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea