Menu
Coddy logo textTech

Обработка ошибок

Часть раздела Основы путешествия по Kotlin на Coddy. Урок 90 из 93.

challenge icon

Задание

Средне

На предыдущем уроке вы реализовали функциональность «Clear All». Теперь добавьте проверку входных данных, чтобы обрабатывать случаи, когда пользователь вводит недопустимую сумму расхода.

Измените программу, чтобы обрабатывать ошибки при добавлении расходов (пункт 1):

  • Когда пользователь вводит сумму расхода, используйте toDoubleOrNull() для безопасного преобразования ввода
  • Если преобразование возвращает null (недопустимый ввод), выведите Invalid amount! вместо добавления расхода
  • Если преобразование выполнено успешно, добавьте расход и, как и раньше, выведите Expense added!

Все остальные пункты должны продолжать работать как раньше:

  • Пункт 1: Добавить расход (с проверкой)
  • Пункт 2: Просмотреть все расходы
  • Пункт 3: Общая сумма и среднее значение
  • Пункт 4: Очистить все расходы
  • Пункт 5: Вывести Goodbye! и завершить работу
  • Недопустимые пункты: вывести Invalid option

Формат ввода:

Выбор пунктов меню и суммы расходов в виде строк.

Формат вывода:

Меню, за которым следует соответствующий ответ для каждого действия.

Пример:

Если введены значения 1, abc, 1, 25.0, 1, hello, 2 и 5, вывод должен быть следующим:

--- 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!

Подсказка: Метод toDoubleOrNull() возвращает null, если строку невозможно преобразовать в Double, вместо аварийного завершения программы. Используйте оператор Элвиса или проверку на null, чтобы обработать этот случай.

Попробуйте сами

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")
        }
    }
}

Все уроки раздела Основы

Потренируйтесь самостоятельно: Песочница Kotlin