Menu
Coddy logo textTech

Tratamento de Erros

Parte da seção Fundamentos do Journey de Kotlin da Coddy. Lição 90 de 93.

challenge icon

Desafio

Médio

Na lição anterior, você implementou a funcionalidade "Clear All". Agora, adicione validação de entrada para lidar com casos em que o usuário insere um valor de despesa inválido.

Modifique seu programa para tratar erros ao adicionar despesas (opção 1):

  • Quando o usuário inserir um valor de despesa, use toDoubleOrNull() para converter a entrada com segurança
  • Se a conversão retornar null (entrada inválida), imprima Invalid amount! em vez de adicionar a despesa
  • Se a conversão for bem-sucedida, adicione a despesa e imprima Expense added! como antes

Todas as outras opções devem continuar funcionando como antes:

  • Opção 1: Adicionar despesa (com validação)
  • Opção 2: Visualizar todas as despesas
  • Opção 3: Total e média
  • Opção 4: Limpar todas as despesas
  • Opção 5: Imprimir Goodbye! e sair
  • Opções inválidas: Imprimir Invalid option

Formato da entrada:

Escolhas do menu e valores de despesas como strings.

Formato da saída:

O menu, seguido da resposta apropriada para cada ação.

Exemplo:

Se as entradas forem 1, abc, 1, 25.0, 1, hello, 2 e 5, a saída deverá 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!

Dica: O método toDoubleOrNull() retorna null se a string não puder ser convertida em um Double, em vez de causar uma falha. Use o operador Elvis ou uma verificação de nulo para lidar com esse caso.

Experimente você mesmo

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 as lições de Fundamentos

Pratique por conta própria: Playground de Kotlin