טיפול בשגיאות
חלק מהיחידה יסודות במסלול ה-Kotlin של Coddy. שיעור 90 מתוך 93.
אתגר
בינוניבשיעור הקודם מימשת את הפונקציונליות של "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 או בבדיקת 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")
}
}
}כל השיעורים ביחידה יסודות
7קלט/פלט בסיסיים
פונקציית Printlnתבניות מחרוזתקלט באמצעות ReadLineהמרת טיפוסיםסיכום – שנים עד הפרישהסיכום – אמת או שקר10פונקציות
הכרזה על פונקציהפרמטרים וארגומנטיםערכי החזרהארגומנטים בעלי שםערכי ברירת מחדלפונקציות עם ביטוי יחידחזרה – פונקציית Sigmaחזרה – פונקציית אימות3אפשרות לערך null
מהי בטיחות מפני nullטיפוסים שיכולים להיות nullאופרטור קריאה בטוחהאופרטור אלביסיסודות אתגר הפונקציותאופרטור ההבטחה לאי־nullסיכום – גישה בטוחה9לולאות
לולאת forלולאת whileלולאת do-whilebreakcontinueטווחים בלולאותלולאה מקוננתחזרה – עצרתחזרה – קלט דינמי12יסודות הרשימות
List לעומת MutableListגישה לאיבריםשינוי רשימותמתודות של רשימותPair ו-Tripleחזרה – רשימת מוצריםחזרה – רשימה הפוכה15מעקב הוצאות יומי
סקירת הפרויקטיציאה מהתוכניתתרגלו בעצמכם: Kotlin אונליין