Tratamento de Erros
Parte da seção Fundamentos do Journey de Kotlin da Coddy. Lição 90 de 93.
Desafio
MédioNa 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), imprimaInvalid 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: ImprimirGoodbye!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
4Operadores – Parte 1
Operadores aritméticosOperador móduloAtribuição aumentadaOperadores de comparaçãoRecapitulação – Matemática simples7Entrada e Saída Básicas
Função PrintlnTemplates de StringEntrada com ReadLineConversão de TiposRevisão - Anos até a AposentadoriaRevisão - Verdadeiro ou Falso10Funções
Declare uma funçãoParâmetros e argumentosValores de retornoArgumentos nomeadosValores padrãoFunções de expressão únicaRecapitulação — função SigmaRecapitulação — função de validação2Variáveis
Val vs VarInferência de TiposNúmerosStringBooleanoConvenções de NomenclaturaRecapitulação - Inicializar Variáveis5Operadores – Parte 2
Operadores lógicos – Parte 1Operadores lógicos – Parte 2Operadores lógicos – Parte 3Ternário com expressão ifRecapitulação – Lógica simples8Calculadora de Divisão da Conta
Mensagem de Boas-vindasObtendo a Entrada11FizzBuzz com uma Reviravolta
Visão Geral do JogoA Função FizzBuzz3Nullabilidade
O que é Null SafetyTipos anuláveisOperador de chamada seguraOperador ElvisNoções básicas do desafio de funçõesAsserção de não nuloRecapitulação - Acesso seguro6Tomada de Decisões
Instrução IfIf - ElseIf como ExpressãoExpressão WhenWhen com IntervalosRecapitulação - Calculadora Simples9Laços de Repetição
Laço ForLaço WhileLaço Do-WhileBreakContinueIntervalos em LaçosLaço AninhadoRecapitulação - FatorialRecapitulação - Entrada Dinâmica12Fundamentos de Listas
List vs MutableListAcessando ElementosModificando ListasMétodos de ListaPair e TripleRecapitulação - Lista de ProdutosRecapitulação - Lista Invertida15Rastreador de Despesas Diárias
Visão Geral do ProjetoSair do ProgramaPratique por conta própria: Playground de Kotlin