Menu
Coddy logo textTech

エラー処理

CoddyのKotlinジャーニー「基礎」セクションの一部。レッスン 90/93。

challenge icon

チャレンジ

中級

前のレッスンでは、「Clear All」機能を実装しました。今回は、ユーザーが無効な経費額を入力した場合に対応できるよう、入力検証を追加します。

経費を追加するとき(オプション 1)のエラーを処理できるよう、プログラムを変更してください。

  • ユーザーが経費額を入力したら、toDoubleOrNull()を使用して安全に入力を変換する
  • 変換結果がnull(無効な入力)の場合は、経費を追加せずにInvalid amount!を出力する
  • 変換に成功した場合は、これまでどおり経費を追加し、Expense added!を出力する

その他のすべてのオプションは、これまでどおり動作する必要があります。

  • オプション 1:経費を追加(検証あり)
  • オプション 2:すべての経費を表示
  • オプション 3:合計と平均
  • オプション 4:すべての経費を消去
  • オプション 5Goodbye!を出力して終了
  • 無効なオプション:Invalid optionを出力

入力形式:

メニューの選択肢と経費額を文字列として入力します。

出力形式:

メニューに続いて、各操作に応じた適切な応答を出力します。

例:

入力が1abc125.01hello25の場合、出力は次のようになります。

--- 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()メソッドは、文字列を Double に変換できない場合でもクラッシュせず、nullを返します。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")
        }
    }
}

基礎のすべてのレッスン

自分で練習してみよう: Kotlinプレイグラウンド