我正在搞亂Coursera的函數式編程課程,我偶然發現了一些奇怪的東西。此問題要求您僅使用方法isEmpty
,head
和tail
查找整數列表的最大值。我的解決方案是一個遞歸函數,如果沒有更多元素,則捕獲UnsupportedOperationException
。該解決方案似乎沒有工作,但我認爲這是因爲這個例外從未被捕獲。Scala中具有尾部功能的最大元素
/**
* This method returns the largest element in a list of integers. If the
* list `xs` is empty it throws a `java.util.NoSuchElementException`.
*
* You can use the same methods of the class `List` as mentioned above.
*
* ''Hint:'' Again, think of a recursive solution instead of using looping
* constructs. You might need to define an auxiliary method.
*
* @param xs A list of natural numbers
* @return The largest element in `xs`
* @throws java.util.NoSuchElementException if `xs` is an empty list
*/
def max(xs: List[Int]): Int =
{
def maxOfTwo(value1: Int, value2: Int) = {
if(value1 > value2) value1
else value2
}
println(xs.size)
try { maxOfTwo(xs.head, max(xs.tail)) }
catch { case noTail: UnsupportedOperationException => xs.head }
}
當我使用下面的代碼,這是剛剛更換UnsupportedOperationException
與Exception
一切完美。我在這裏錯過了什麼嗎?
def max(xs: List[Int]): Int =
{
def maxOfTwo(value1: Int, value2: Int) = {
if(value1 > value2) value1
else value2
}
println(xs.size)
try { maxOfTwo(xs.head, max(xs.tail)) }
catch { case noTail: Exception => xs.head }
}
你應該添加'homework'標籤。 :) –
@AlexCruise它是否真的算作功課,如果它是一個MOOC,甚至不在會話中? – ThomYorkkke