Obsługa błędów
Część sekcji Podstawy ścieżki Kotlin w Coddy. Lekcja 90 z 93.
Wyzwanie
ŚredniW poprzedniej lekcji zaimplementowano funkcję „Wyczyść wszystko”. Teraz dodaj walidację danych wejściowych, aby obsłużyć przypadki, gdy użytkownik wprowadzi nieprawidłową kwotę wydatku.
Zmodyfikuj program, aby obsługiwał błędy podczas dodawania wydatków (opcja 1):
- Gdy użytkownik wprowadzi kwotę wydatku, użyj
toDoubleOrNull(), aby bezpiecznie przekonwertować dane wejściowe - Jeśli konwersja zwróci
null(nieprawidłowe dane wejściowe), wyświetlInvalid amount!zamiast dodawać wydatek - Jeśli konwersja się powiedzie, dodaj wydatek i wyświetl
Expense added!, tak jak wcześniej
Wszystkie pozostałe opcje powinny nadal działać tak jak wcześniej:
- Opcja
1: Dodaj wydatek (z walidacją) - Opcja
2: Wyświetl wszystkie wydatki - Opcja
3: Suma i średnia - Opcja
4: Wyczyść wszystkie wydatki - Opcja
5: WyświetlGoodbye!i zakończ - Nieprawidłowe opcje: Wyświetl
Invalid option
Format danych wejściowych:
Wybory z menu i kwoty wydatków jako ciągi znaków.
Format danych wyjściowych:
Menu, a po nim odpowiednia odpowiedź dla każdej czynności.
Przykład:
Jeśli dane wejściowe to 1, abc, 1, 25.0, 1, hello, 2 i 5, dane wyjściowe powinny wyglądać następująco:
--- 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!Podpowiedź: Metoda toDoubleOrNull() zwraca null, jeśli ciągu znaków nie można przekonwertować na wartość typu Double, zamiast powodować awarię. Użyj operatora Elvis lub sprawdzenia wartości null, aby obsłużyć ten przypadek.
Spróbuj swoich sił
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")
}
}
}Wszystkie lekcje w sekcji Podstawy
4Operatory – część 1
Operatory arytmetyczneOperator moduloPrzypisanie z operatoremOperatory porównaniaPowtórka – proste działania matematyczne7Podstawowe wejście/wyjście
Funkcja printlnSzablony ciągów znakówWczytywanie danych przez ReadLineKonwersja typówPowtórka — lata do emeryturyPowtórka — prawda czy fałsz10Funkcje
Deklarowanie funkcjiParametry i argumentyWartości zwracaneArgumenty nazwaneWartości domyślneFunkcje z pojedynczym wyrażeniemPowtórka – funkcja SigmaPowtórka – funkcja walidująca2Zmienne
Val a VarWnioskowanie o typieLiczbyŁańcuch znakówWartość logicznaKonwencje nazewnictwaPowtórzenie – inicjalizacja zmiennych5Operatory, część 2
Operatory logiczne, część 1Operatory logiczne, część 2Operatory logiczne, część 3Operator trójargumentowy z wyrażeniem ifPowtórka — prosta logika8Kalkulator podziału rachunku
Wiadomość powitalnaPobieranie danych11FizzBuzz z niespodzianką
Omówienie gryFunkcja FizzBuzz3Obsługa wartości null
Czym jest bezpieczeństwo nullTypy dopuszczające nullOperator bezpiecznego wywołaniaOperator ElvisPodstawy wyzwania z funkcjamiAsercja wartości niebędącej nullPodsumowanie — bezpieczny dostęp6Podejmowanie decyzji
Instrukcja ifIf - elseIf jako wyrażenieWyrażenie whenWhen z zakresamiPowtórka — prosty kalkulator9Pętle
Pętla forPętla whilePętla do-whileBreakContinueZakresy w pętlachPętla zagnieżdżonaPowtórka – silniaPowtórka – dynamiczne wprowadzanie danych12Podstawy list
List a MutableListDostęp do elementówModyfikowanie listMetody listPair i TriplePowtórka – lista produktówPowtórka – odwrócona lista15Codzienny rejestr wydatków
Przegląd projektuZakończenie programuPoćwicz samodzielnie: Edytor online Kotlin