4 - Entrada de datos por teclado en la Consola

Cuando utilizamos la Consola para mostrar información por pantalla utilizamos las funciones print y println. Si necesitamos entrar datos por teclado podemos utilizar la función readLine.

Problema 1

Realizar la carga de dos números enteros por teclado e imprimir su suma y su producto.

Proyecto5 - Principal.kt

fun main(argumento: Array<String>) {
    print("Ingrese primer valor:")
    val valor1 = readLine()!!.toInt()
    print("Ingrese segundo valor:")
    val valor2 = readLine()!!.toInt()
    val suma = valor1 + valor2
    println("La suma de $valor1 y $valor2 es $suma")
    val producto = valor1 * valor2
    println("El producto de $valor1 y $valor2 es $producto")}

Para entrada de datos por teclado disponemos una función llamada readLine. Esta función retorna un String con los caracteres escritos por el operador hasta que presiona la tacla "Entrada". Luego llamando al método toInt de la clase String se convierten los datos ingresados por teclado en un Int y se guarda en valor1.

El problema se presenta cuando el operador presiona la tecla "Entrada" sin cargar datos, en ese caso retorna null.

Vimos que una de las premisas de Kotlin es ser conciso, la segunda premisa es que sea seguro, luego cuando una función retorna null no podemos llamar a los métodos que tiene ese objeto:

valor1 = readLine().toInt()

La línea anterior no compila ya que si readLine retorna un String es correcto llamar al método toInt para que lo convierta a entero, pero readLine puede retornar null y en ese caso no podemos llamar a toInt.

La primer forma de resolver esto es avisarle al compilador de Kotlin que confíe que la función readLine siempre retorna un String, esto lo hacemos agregando el operador !! en la llamada:

    valor1 = readLine()!!.toInt()

No es la mejor forma de validar que se ingrese en forma obligatoria un dato por teclado pero en los próximos conceptos veremos como mejorar la entrada de datos por teclado para que sea más segura y evitar que se generen errores cuando el operador presiona la tecla "Entrada" sin ingresar datos.

Continuando con el problema luego de cargar los dos enteros por tecla procedemos a sumarlos, multiplicarlos y mostrar los resultados:

    val suma = valor1 + valor2
    println("La suma de $valor1 y $valor2 es $suma")
    val producto = valor1 * valor2
    println("El producto de $valor1 y $valor2 es $producto")

Problema 2

Realizar la carga del lado de un cuadrado, mostrar por pantalla el perímetro del mismo (El perímetro de un cuadrado se calcula multiplicando el valor del lado por cuatro)

Proyecto6 - Principal.kt

fun main(parametro: Array) {
    print("Ingrese la medida del lado del cuadrado:")
    val lado = readLine()!!.toInt()
    val perimetro = lado * 4
    println("El perímetro del cuadrado es $perimetro")
}

La variable lado por inferencia se define de tipo Int:

    val lado = readLine()!!.toInt()

Recordemos que en forma extensa podemos escribir el código anterior con la siguiente sintaxis:

    val lado: Int
    lado = readLine()!!.toInt()

En Kolin recordemos que lo que se busca que el código sea lo más conciso posible.

Luego calculamos el perímetro y lo mostramos por la Consola:

    val perimetro = lado * 4
    println("El perímetro del cuadrado es $perimetro")

Problema 3

Se debe desarrollar un programa que pida el ingreso del precio de un artículo y la cantidad que lleva el cliente. Mostrar lo que debe abonar el comprador.

Proyecto7 - Principal.kt


fun main(parametro: Array<String>) {
    print("Ingrese el precio del producto:")
    val precio = readLine()!!.toDouble()
    print("Ingrese la cantidad de productos:")
    val cantidad = readLine()!!.toInt()
    val total = precio * cantidad
    println("El total a pagar es $total")
}

Cargamos por teclado un valor de tipo Double y por inferencia se define la variable precio con dicho tipo:

    print("Ingrese el precio del producto:")
    val precio = readLine()!!.toDouble()

Seguidamente cargamos la cantidad de productos a llevar, el dato que debe ingresar el operador es un entero:

    print("Ingrese la cantidad de productos:")
    val cantidad = readLine()!!.toInt()

Finalmente multiplicamos la variable Double y la variable Int dando como resultado otro valor Double:

    val total = precio * cantidad
    println("El total a pagar es $total")

Problemas propuestos

  • Escribir un programa en el cual se ingresen cuatro números enteros, calcular e informar la suma de los dos primeros y el producto del tercero y el cuarto.
  • Realizar un programa que lea por teclado cuatro valores numéricos enteros e informar su suma y promedio.
Solución
Proyecto8

fun main(parametro: Array<String>) {
    print("Ingrese primer valor:")
    val v1 = readLine()!!.toInt()
    print("Ingrese segundo valor:")
    val v2 = readLine()!!.toInt()
    print("Ingrese tercer valor:")
    val v3 = readLine()!!.toInt()
    print("Ingrese cuarto valor:")
    val v4 = readLine()!!.toInt()
    val suma = v1 + v2
    println("La suma de $v1 y $v2 es $suma")
    val producto = v3 * v4
    println("El producto de $v3 y $v4 es $producto")
}




Proyecto9

fun main(parametro: Array<String>) {
    print("Ingrese primer valor:")
    val v1 = readLine()!!.toInt()
    print("Ingrese segundo valor:")
    val v2 = readLine()!!.toInt()
    print("Ingrese tercer valor:")
    val v3 = readLine()!!.toInt()
    print("Ingrese cuarto valor:")
    val v4 = readLine()!!.toInt()
    val suma = v1 + v2 + v3 + v4
    println("La suma de los cuatro valores es $suma")
    val prom = suma / 4
    println("El promedio de los cuatro valores es $prom")
}