Gestión de errores
Parte de la sección Fundamentos del Journey de Kotlin de Coddy. Lección 90 de 93.
Desafío
IntermedioEn la lección anterior, implementaste la funcionalidad "Clear All". Ahora, añade validación de entrada para gestionar los casos en los que el usuario introduce un importe de gasto no válido.
Modifica tu programa para gestionar los errores al añadir gastos (opción 1):
- Cuando el usuario introduzca un importe de gasto, utiliza
toDoubleOrNull()para convertir la entrada de forma segura - Si la conversión devuelve
null(entrada no válida), imprimeInvalid amount!en lugar de añadir el gasto - Si la conversión tiene éxito, añade el gasto e imprime
Expense added!como antes
Todas las demás opciones deben seguir funcionando como antes:
- Opción
1: Añadir gasto (con validación) - Opción
2: Ver todos los gastos - Opción
3: Total y promedio - Opción
4: Borrar todos los gastos - Opción
5: ImprimirGoodbye!y salir - Opciones no válidas: Imprimir
Invalid option
Formato de entrada:
Opciones del menú e importes de gastos como cadenas.
Formato de salida:
El menú, seguido de la respuesta adecuada para cada acción.
Ejemplo:
Si las entradas son 1, abc, 1, 25.0, 1, hello, 2 y 5, la salida debe ser:
--- Expense Tracker ---
1. Add Expense
2. View All Expenses
3. Total and Average
4. Clear All
5. Exit
Choose an option:
Enter expense amount:
Invalid amount!
--- Expense Tracker ---
1. Add Expense
2. View All Expenses
3. Total and Average
4. Clear All
5. Exit
Choose an option:
Enter expense amount:
Expense added!
--- Expense Tracker ---
1. Add Expense
2. View All Expenses
3. Total and Average
4. Clear All
5. Exit
Choose an option:
Enter expense amount:
Invalid amount!
--- Expense Tracker ---
1. Add Expense
2. View All Expenses
3. Total and Average
4. Clear All
5. Exit
Choose an option:
Your expenses:
- $25.0
--- Expense Tracker ---
1. Add Expense
2. View All Expenses
3. Total and Average
4. Clear All
5. Exit
Choose an option:
Goodbye!Consejo: El método toDoubleOrNull() devuelve null si la cadena no se puede convertir en un Double, en lugar de provocar un error. Utiliza el operador Elvis o una comprobación de nulo para gestionar este caso.
Pruébalo tú mismo
fun main() {
val expenses = mutableListOf<Double>()
while (true) {
println("--- Expense Tracker ---")
println("1. Add Expense")
println("2. View All Expenses")
println("3. Total and Average")
println("4. Clear All")
println("5. Exit")
println("Choose an option:")
val choice = readLine()
if (choice == "1") {
println("Enter expense amount:")
val amount = readLine()!!.toDouble()
expenses.add(amount)
println("Expense added!")
} else if (choice == "2") {
if (expenses.isEmpty()) {
println("No expenses recorded.")
} else {
println("Your expenses:")
for (expense in expenses) {
println("- \$$expense")
}
}
} else if (choice == "3") {
if (expenses.isEmpty()) {
println("No expenses recorded.")
} else {
val total = expenses.sum()
val average = total / expenses.size
println("Total: \$$total")
println("Average: \$$average")
}
} else if (choice == "4") {
expenses.clear()
println("All expenses cleared!")
} else if (choice == "5") {
println("Goodbye!")
break
} else {
println("Invalid option")
}
}
}Todas las lecciones de Fundamentos
4Operadores, parte 1
Operadores aritméticosOperador móduloAsignación aumentadaOperadores de comparaciónRepaso: matemáticas simples7Entrada y salida básicas
Función PrintlnPlantillas de cadenasEntrada con ReadLineConversión de tiposRepaso - Años hasta la jubilaciónRepaso - Verdadero o falso10Funciones
Declarar una funciónParámetros y argumentosValores de retornoArgumentos con nombreValores predeterminadosFunciones de una sola expresiónRepaso - Función SigmaRepaso - Función de validación2Variables
Val frente a VarInferencia de tiposNúmerosCadenaBooleanoConvenciones de nomenclaturaRepaso: inicializar variables5Operadores Parte 2
Operadores lógicos Parte 1Operadores lógicos Parte 2Operadores lógicos Parte 3Ternario con expresión ifRepaso: lógica simple8Calculadora para dividir la cuenta
Mensaje de bienvenidaObtención de datos11FizzBuzz con un giro
Descripción general del juegoLa función FizzBuzz3Nullabilidad
Qué es la seguridad frente a valores nulosTipos anulablesOperador de llamada seguraOperador ElvisConceptos básicos de retos de funcionesAfirmación de no nulidadRepaso: acceso seguro6Toma de decisiones
Sentencia ifIf - ElseIf como expresiónExpresión whenWhen con rangosRepaso - Calculadora simple9Bucles
Bucle ForBucle WhileBucle Do-WhileBreakContinueRangos en buclesBucle anidadoRepaso - FactorialRepaso - Entrada dinámica12Conceptos básicos de las listas
List vs MutableListAcceso a elementosModificación de listasMétodos de listasPair y TripleRepaso - Lista de productosRepaso - Lista invertida15Rastreador diario de gastos
Descripción general del proyectoSalir del programaPractica por tu cuenta: Playground de Kotlin