2015-10-03 34 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

请看看你的代码有问题。你想像这样调用这个函数递归,而不是像你这样做。