Menu
CoddyTech

处理错误

本课属于 Coddy Kotlin 学习旅程的“基础知识”单元。第 90 课,共 93 课。

challenge icon

挑战

中等

在上一课中,你实现了“全部清除”功能。现在,添加输入验证,以处理用户输入无效费用金额的情况。

修改程序,以处理添加费用时的错误(选项 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!

提示:如果字符串无法转换为 Double,toDoubleOrNull() 方法会返回 null,而不会导致程序崩溃。使用 Elvis 运算符或空值检查来处理这种情况。

亲手试试

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 在线编辑器