Gestione degli errori
Fa parte della sezione Fondamenti del percorso Kotlin di Coddy. Lezione 90 di 93.
Sfida
MedioNella lezione precedente hai implementato la funzionalità "Clear All". Ora aggiungi la convalida dell'input per gestire i casi in cui l'utente inserisce un importo di spesa non valido.
Modifica il programma per gestire gli errori durante l'aggiunta delle spese (opzione 1):
- Quando l'utente inserisce un importo di spesa, usa
toDoubleOrNull()per convertire l'input in modo sicuro - Se la conversione restituisce
null(input non valido), stampaInvalid amount!invece di aggiungere la spesa - Se la conversione riesce, aggiungi la spesa e stampa
Expense added!come prima
Tutte le altre opzioni devono continuare a funzionare come prima:
- Opzione
1: Aggiungi una spesa (con convalida) - Opzione
2: Visualizza tutte le spese - Opzione
3: Totale e media - Opzione
4: Cancella tutte le spese - Opzione
5: StampaGoodbye!ed esci - Opzioni non valide: Stampa
Invalid option
Formato dell'input:
Scelte del menu e importi delle spese come stringhe.
Formato dell'output:
Il menu, seguito dalla risposta appropriata per ogni azione.
Esempio:
Se gli input sono 1, abc, 1, 25.0, 1, hello, 2 e 5, l'output dovrebbe essere:
--- 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!Suggerimento: Il metodo toDoubleOrNull() restituisce null se la stringa non può essere convertita in un Double, invece di generare un errore. Usa l'operatore Elvis o un controllo dei valori null per gestire questo caso.
Provalo tu
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")
}
}
}Tutte le lezioni di Fondamenti
4Operatori Parte 1
Operatori aritmeticiOperatore moduloAssegnazione compostaOperatori di confrontoRipasso: matematica semplice7Input/output di base
Funzione printlnTemplate di stringheInput con readLineConversione di tipoRiepilogo - Anni alla pensioneRiepilogo - Vero o falso10Funzioni
Dichiarare una funzioneParametri e argomentiValori di ritornoArgomenti denominatiValori predefinitiFunzioni a espressione singolaRiepilogo - Funzione SigmaRiepilogo - Funzione di validazione2Variabili
Val vs VarInferenza del tipoNumeriStringaBooleanoConvenzioni di denominazioneRiepilogo - Inizializzare le variabili5Operatori Parte 2
Operatori logici Parte 1Operatori logici Parte 2Operatori logici Parte 3Ternario con espressione ifRipasso - Logica semplice8Calcolatore per dividere il conto
Messaggio di benvenutoAcquisire i dati11FizzBuzz con un tocco
Panoramica del giocoLa funzione FizzBuzz3Nullabilità
Cos'è la null safetyTipi nullableOperatore di chiamata sicuraOperatore ElvisBasi della sfida sulle funzioniAsserzione non-nullRiepilogo - Accesso sicuro6Prendere decisioni
Istruzione ifIf-elseIf come espressioneEspressione whenwhen con intervalliRiepilogo - Calcolatrice semplice9Cicli
Ciclo forCiclo whileCiclo do-whilebreakcontinueIntervalli nei cicliCiclo annidatoRipasso - fattorialeRipasso - input dinamico12Nozioni di base sulle liste
List vs MutableListAccesso agli elementiModificare le listeMetodi delle listePair e TripleRipasso - Lista dei prodottiRipasso - Lista invertita15Gestore delle spese giornaliere
Panoramica del progettoEsci dal programmaEsercitati da solo: Playground Kotlin