2015-10-03 64 views
0

捕捉異常誰能教我該往哪兒插的try/catch到這個代碼,並確保如果用戶輸入一個字符串,它是不是會不會崩潰「退出」或也不是一個數字?以下代碼用於計算某些數字的平均值。我的教授沒有告訴我們我們將使用哪個例外。另外我對他們不太熟悉。使用嘗試和斯卡拉

import io.StdIn._ 

def sumAndCount() : (Int, Int) = { 
    println("Please enter a number; or enter Quit:") 
    val input = readLine.toLowerCase.trim 
    input match { 
     case "quit" => (0, 0) 
     case _ => val (sum, count) = sumAndCount() 
        (input.toInt+sum, count + 1) 
    } 
} 

val (sum, count) = sumAndCount() 
val aver = sum.toDouble/count 

println(f"The average is $aver") 
+0

提示:使用您當前的代碼,當輸入既不是「退出」也不是數字的內容時會發生什麼? (你試過了嗎?) –

+0

當你在一個字符串上調用'toInt'時,你可以得到'NumberFormatException'。我相信你應該重新設計這個代碼,它甚至不工作。 –

回答

1
import io.StdIn._ 

def sumAndCount(sum: Int, count: Int) : (Int, Int) = { 
    println("Please enter a number; or enter Quit:") 
    val input = readLine.toLowerCase.trim 
    input match { 
     case "quit" => (sum, count) 
     case _ => try { 
      val number = input.toInt 
      sumAndCount(sum + number, count + 1) 
     } catch { 
      case _: NumberFormatException => 
      println("that's not a number, try again") 
      sumAndCount(sum, count) 
     } 
    } 
} 

val (sum, count) = sumAndCount(0, 0) 
val aver = sum.toDouble/count 

println(f"The average is $aver") 

您可能還需要處理時,用戶只類型退出的情況下,ATM結果將是NaN

請看看你的代碼有問題。你想像這樣調用這個函數遞歸,而不是像你這樣做。