Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

معالجة الأخطاء

جزء من قسم الأساسيات في رحلة 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، بدلًا من التسبب في تعطل البرنامج. استخدم عامل 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")
        }
    }
}

جميع دروس الأساسيات

تدرّب بنفسك: Playground لـ Kotlin